学习方法与心得
题目解析
问题描述
小U正在检查某同学的选择题答案。题目只有两个选项A和B,并且小U需要判断:
- 如果将学生的答案完全反选后,正确答案数是否会增加、不变还是减少?
有三种可能结果: yes:反选后正确答案数增加。draw:反选后正确答案数不变。no:反选后正确答案数减少。
解题思路
1. 原始答案与标准答案的比较
逐一检查学生的答案s和标准答案t:
- 如果
s[i] == t[i],说明该题原始答案正确,originalCorrect++。 - 如果
s[i] != t[i],说明反选后这题正确,flippedCorrect++。
2. 比较正确答案数量
通过比较originalCorrect和flippedCorrect的大小:
- 若
flippedCorrect > originalCorrect,输出yes。 - 若
flippedCorrect == originalCorrect,输出draw。 - 若
flippedCorrect < originalCorrect,输出no。
代码实现
以下是完整的代码实现:
public class Main {
public static String solution(int n, String s, String t) {
// 初始化原始答案的正确数
int originalCorrect = 0;
// 初始化反选后的正确数
int flippedCorrect = 0;
// 遍历每一道题目
for (int i = 0; i < n; i++) {
// 如果原始答案正确
if (s.charAt(i) == t.charAt(i)) {
originalCorrect++;
}
// 如果反选后的答案正确
if (s.charAt(i) != t.charAt(i)) {
flippedCorrect++;
}
}
// 比较原始答案和反选后的答案的正确数
if (flippedCorrect > originalCorrect) {
return "yes";
} else if (flippedCorrect == originalCorrect) {
return "draw";
} else {
return "no";
}
}
public static void main(String[] args) {
System.out.println(solution(2, "AB", "AA").equals("draw"));
System.out.println(solution(3, "BAA", "ABB").equals("yes"));
System.out.println(solution(4, "ABAB", "BABA").equals("yes"));
}
}
核心算法分析
1. 时间复杂度
由于需要逐一遍历字符串s和t,算法的时间复杂度为O(n),其中n是题目数量。
2. 空间复杂度
算法只使用了几个整型变量记录正确答案数量,空间复杂度为O(1),非常节省内存。
3. 算法逻辑核心
- 逐一比较:逐题判断当前答案是否正确。
- 统计结果:分别统计原始答案和反选答案的正确数量。
- 直接比较:比较两个统计值后输出结果。
知识总结
通过这道题目,我学习到了以下知识点:
-
逐一遍历与条件判断
- 这类需要遍历字符逐一比较的题目,使用
for循环结合charAt()方法可以非常直观地解决问题。
- 这类需要遍历字符逐一比较的题目,使用
-
逻辑分支的优化
- 代码设计中,直接通过
if-else语句判断结果是一种高效简洁的写法,避免了不必要的分支嵌套。
- 代码设计中,直接通过
-
问题建模与分解
- 将复杂问题分解为子任务:统计两个正确答案数量并比较,使得解题过程更清晰。
学习计划
1. 每天坚持刷题
结合豆包MarsCode AI刷题功能,每天完成3道题,逐步挑战更多有逻辑性和复杂度的题目。
2. 分类梳理题目类型
按照题目类型(例如字符串处理、数组操作、逻辑判断)分类学习,形成体系化的知识网络。
3. 分析错题与优化代码
定期总结错误原因,例如逻辑漏洞、边界情况考虑不足等,并尝试优化已有代码。
工具运用
-
豆包MarsCode AI 的解析功能
- 每次解题后,利用AI解析功能理解题目背后的算法原理,尤其是高效实现方法与代码优化策略。
-
结合其他学习资源
- 视频课程:直观理解算法逻辑。
- 编程社区:借鉴优秀的代码实现。
-
错题记录与重做
- 记录每道错题及其优化思路,定期回顾巩固。
学习建议
-
从易到难,循序渐进
刚开始刷题时,优先选择简单题目掌握基础逻辑。 -
主动思考,避免依赖
充分思考后再查看AI解析,能更好地锻炼独立解题能力。 -
坚持不懈,积累经验
刷题是一个长期积累的过程,坚持每天进步一点点,效果会十分显著。
相信通过豆包MarsCode AI的助力,每位学习者都能在编程的道路上实现自我突破!