实践记录以及工具使用 | 豆包MarsCode AI 刷题

40 阅读4分钟

云端编辑器,无需繁琐的本地软件安装与环境配置,只要有网络和设备,就可以多种类型的语言进行刷题或对代码进行测试,非常方便。这让我可以随时随地进行代码的练习,让我可以更好的拼凑一天零碎的时间,让我一天的学习时间更为充足

我们再拿一个题目来展开分析一下AI 刷题的优势: 原题是: 小U拥有一个由0和1组成的字符串,她可以进行最多k次操作,每次操作可以交换相邻的两个字符。目标是通过这些操作,使得最终得到的字符串字典序最小。

例如,小U当前有一个字符串 01010,她最多可以进行 2 次相邻字符交换操作。通过这些操作,她可以将字符串调整为 00101,这是可以通过不超过2次操作得到的字典序最小的字符串。

现在,小U想知道,经过最多k次操作后,能够得到的字典序最小的字符串是什么。

代码:

public class Main {
	public static String solution(int n, int k, String s) {
		// write code here
		char[] str = s.toCharArray();
		// 使用贪心算法,每次选择最小的字符并尽可能向前移动
		for (int i = 0; i < n && k > 0; i++) {
			// 找到当前位置到 i+k 范围内最小的字符
			int minIndex = i;
			for (int j = i + 1; j <= i + k && j < n; j++) {
				if (str[j] < str[minIndex]) {
					minIndex = j;
				}
			}
			// 将最小的字符移动到当前位置
			while (minIndex > i) {
				swapChar(str, minIndex, minIndex - 1);
				minIndex--;
				k--;
			}
		}
		return new String(str);
	}

	public static void swapChar(char[] array, int i, int j) {
		char temp = array[i];
		array[i] = array[j];
		array[j] = temp;
	}

	public static void main(String[] args) {
		System.out.println(solution(5, 2, "01010").equals("00101"));
		System.out.println(solution(7, 3, "1101001").equals("0110101"));
		System.out.println(solution(4, 1, "1001").equals("0101"));
	}
}

(一)精准定位错误

在上述字符串交换操作的代码案例中,AI 刷题平台能够精准指出代码逻辑中的错误之处。例如,如果在寻找最小字符索引的循环条件或者交换字符的逻辑代码块中出现错误,AI 可以准确地定位到具体的代码行。这比我们自己手动检查代码或者依靠传统的调试方式更加高效,能够大大节省排查错误的时间,让我们可以将更多精力聚焦于理解和修正错误上。

(二)提供优化思路

AI 不仅能找出代码中的错误,还能针对代码的效率和简洁性提供优化思路。以本题的贪心算法实现为例,AI 刷题可能会提示在寻找最小字符索引的内层循环中,可以进一步优化比较逻辑,减少不必要的比较次数。这种优化建议有助于我们提升代码质量,学习到更高效的编程技巧,使我们从单纯的代码实现者逐渐成长为代码优化大师。

(三)即时反馈学习

在我们编写完代码并提交到 AI 刷题平台后,能够立即得到反馈。对于上述案例中的代码,如果运行结果与预期不符,AI 会迅速告知。比如在处理长字符串和较大的操作次数 k 时,若代码出现时间复杂度超标的情况,AI 能及时提醒,这样我们可以马上回顾代码逻辑,思考如何改进,而不是在完成一系列学习任务后才发现问题,从而保持学习的连贯性和高效性。

二、AI 检查代码功能在案例中的学习助力

在处理“小 U 字符串交换”的案例时,假设我们最初编写的代码在处理边界情况时出现错误,比如当 k 的值较大接近字符串长度 n 时,代码可能会出现数组越界异常。AI 刷题的检查代码功能会迅速标记出这个错误,并提示我们可能是循环边界条件设置不合理。我们根据提示检查代码,发现原来是在寻找最小字符并移动的循环中,没有正确考虑 k 的剩余值与字符串剩余长度的关系。通过修正这个错误,我们不仅解决了当前的问题,还深刻理解了在处理类似涉及边界和操作次数限制的编程问题时需要注意的要点,从而提升了我们在字符串操作和逻辑控制方面的编程能力,为今后处理更复杂的编程任务奠定了坚实的基础。

综上所述,AI 刷题的优势尤其是其代码检查功能,在编程学习中扮演着极为重要的角色,能够有效提升我们的学习效率和编程技能水平。