每天一小步 | 豆包MarsCode AI刷题

137 阅读3分钟

学习方法与心得

题目解析

问题描述

小U正在检查某同学的选择题答案。题目只有两个选项AB,并且小U需要判断:

  • 如果将学生的答案完全反选后,正确答案数是否会增加不变还是减少
    有三种可能结果:
  • yes:反选后正确答案数增加。
  • draw:反选后正确答案数不变。
  • no:反选后正确答案数减少。

解题思路

1. 原始答案与标准答案的比较

逐一检查学生的答案s和标准答案t

  • 如果s[i] == t[i],说明该题原始答案正确,originalCorrect++
  • 如果s[i] != t[i],说明反选后这题正确,flippedCorrect++
2. 比较正确答案数量

通过比较originalCorrectflippedCorrect的大小:

  • 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. 时间复杂度

由于需要逐一遍历字符串st,算法的时间复杂度为O(n),其中n是题目数量。

2. 空间复杂度

算法只使用了几个整型变量记录正确答案数量,空间复杂度为O(1),非常节省内存。

3. 算法逻辑核心

  • 逐一比较:逐题判断当前答案是否正确。
  • 统计结果:分别统计原始答案和反选答案的正确数量。
  • 直接比较:比较两个统计值后输出结果。

知识总结

通过这道题目,我学习到了以下知识点:

  1. 逐一遍历与条件判断

    • 这类需要遍历字符逐一比较的题目,使用for循环结合charAt()方法可以非常直观地解决问题。
  2. 逻辑分支的优化

    • 代码设计中,直接通过if-else语句判断结果是一种高效简洁的写法,避免了不必要的分支嵌套。
  3. 问题建模与分解

    • 将复杂问题分解为子任务:统计两个正确答案数量并比较,使得解题过程更清晰。

学习计划

1. 每天坚持刷题

结合豆包MarsCode AI刷题功能,每天完成3道题,逐步挑战更多有逻辑性和复杂度的题目。

2. 分类梳理题目类型

按照题目类型(例如字符串处理、数组操作、逻辑判断)分类学习,形成体系化的知识网络。

3. 分析错题与优化代码

定期总结错误原因,例如逻辑漏洞、边界情况考虑不足等,并尝试优化已有代码。


工具运用

  1. 豆包MarsCode AI 的解析功能

    • 每次解题后,利用AI解析功能理解题目背后的算法原理,尤其是高效实现方法与代码优化策略。
  2. 结合其他学习资源

    • 视频课程:直观理解算法逻辑。
    • 编程社区:借鉴优秀的代码实现。
  3. 错题记录与重做

    • 记录每道错题及其优化思路,定期回顾巩固。

学习建议

  1. 从易到难,循序渐进
    刚开始刷题时,优先选择简单题目掌握基础逻辑。

  2. 主动思考,避免依赖
    充分思考后再查看AI解析,能更好地锻炼独立解题能力。

  3. 坚持不懈,积累经验
    刷题是一个长期积累的过程,坚持每天进步一点点,效果会十分显著。

相信通过豆包MarsCode AI的助力,每位学习者都能在编程的道路上实现自我突破!