AI刷题简介
在刷题的时候,我们阅读完题目之后到写完答案提交成功这一过程可分为审题、思考、输出代码。这一整个过程,AI都可以参与其中。
审题阶段
当我们遇到比较冗长的题目,我们第一时间无法抓到题目的重点。但是因为在日常刷题中,我们需要更快速地进入对问题的思考,避免长时间的读题目浪费时间。这个时候我们可以让AI帮我们总结问题。
我们可以像AI提问:“请帮我归纳题目”、“请帮我总结问题” 等话语
例如 中等题 57题 最大相等分割红包金额
问题描述
小U在公司年会上运气极佳,赢得了一等奖。作为一等奖得主,他有机会在一排红包中做两次切割,将红包分成三部分,要求第一部分和第三部分的红包总金额相等。他可以获得的金额是第一部分红包的总金额。帮小U计算出他能从这些红包中拿到的最大奖金金额。
困难题 UCC字串计算
问题描述
小S有一个由字符 'U' 和 'C' 组成的字符串 SS,并希望在编辑距离不超过给定值 mm 的条件下,尽可能多地在字符串中找到 "UCC" 子串。
编辑距离定义为将字符串 SS 转化为其他字符串时所需的最少编辑操作次数。允许的每次编辑操作是插入、删除或替换单个字符。你需要计算在给定的编辑距离限制 mm 下,能够包含最多 "UCC" 子串的字符串可能包含多少个这样的子串。
例如,对于字符串"UCUUCCCCC"和编辑距离限制m = 3,可以通过编辑字符串生成最多包含3个"UCC"子串的序列。
思考
我们在审题后,基本上对题目的意思清楚了。简单而言就是,给定我们什么东西(数组、变量等等),需要我们做出什么样的结果(输出)。
那么假设我们理解了题目的意思,但是没有头绪,比如用什么数据结构,用什么样的算法,并且暴力求解、暴力模拟非常复杂。我们仍然可以问AI。
最大相等分割红包金额
我们可以问AI:这道题的思路是什么?
好的,让我们来逐步分析这个问题,并提供一些思路提示。
问题理解
我们需要将红包列表分成三部分,使得第一部分和第三部分的总金额相等,并且计算出第一部分的最大总金额。
数据结构选择
- 前缀和数组:用于快速计算任意子数组的和。
- 双指针:用于在数组中寻找合适的切割点。
算法步骤
- 计算前缀和:首先计算红包列表的前缀和数组,这样可以快速计算任意子数组的和。
- 双指针遍历:使用双指针从两端向中间遍历,寻找合适的切割点。
- 比较和调整:在遍历过程中,比较第一部分和第三部分的总金额,如果相等则记录当前的最大值,如果不相等则调整指针位置。
具体步骤
初始化前缀和数组:
- 计算前缀和数组
prefixSum,其中prefixSum[i]表示从redpacks[0]到redpacks[i]的总和。双指针遍历:
- 使用两个指针
i和j,分别从数组的两端开始。- 计算当前
i和j位置的前缀和,即leftSum = prefixSum[i]和rightSum = prefixSum[n-1] - prefixSum[j-1]。- 如果
leftSum等于rightSum,则更新最大值max。- 如果
leftSum大于rightSum,则移动j指针向左。- 如果
leftSum小于rightSum,则移动i指针向右。返回最大值:
- 最终返回
max,即第一部分的最大总金额。注意
- 在遍历过程中,确保
i和j之间的距离足够大,以保证至少有一个红包在中间部分。希望这些思路提示对你有所帮助!如果你有任何具体的问题或需要进一步的解释,请告诉我。
这样我们就知道了用什么样的思路解题,有效避免暴力求解百思不得求解浪费的刷题时间。
输出代码
根据给定的思路,我们开始正式写代码,如果仍然不知道代码如何写,我们可以让AI给出完整的代码或者代码提示。(偶尔我们需要自己改进代码,因为AI也会出错),通过我们的改进,我们可以输出正确的代码。
import java.util.ArrayList;
import java.util.List;
public class Main {
public static int solution(List<Integer> redpacks) {
// Please write your code here
int n = redpacks.size();
int i = 0, j = n - 1;
int max = 0;
while (i < j) {
int left = 0;
int right = 0;
for (int k = 0; k <= i; k++) {
left += redpacks.get(k);
}
for (int k = n - 1; k >= j; k--) {
right += redpacks.get(k);
}
if (left == right) {
max = Math.max(max, right);
i++;
j--;
} else if (left > right) {
j--;
} else {
i++;
}
}
return max;
}
public static void main(String[] args) {
// You can add more test cases here
List<Integer> redpacks1 = new ArrayList<>();
redpacks1.add(1);
redpacks1.add(3);
redpacks1.add(4);
redpacks1.add(6);
redpacks1.add(7);
redpacks1.add(14);
List<Integer> redpacks2 = new ArrayList<>();
redpacks2.add(10000);
List<Integer> redpacks3 = new ArrayList<>();
redpacks3.add(52);
redpacks3.add(13);
redpacks3.add(61);
redpacks3.add(64);
redpacks3.add(42);
redpacks3.add(26);
redpacks3.add(4);
redpacks3.add(27);
redpacks3.add(25);
List<Integer> redpacks4 = new ArrayList<>();
redpacks4.add(2);
redpacks4.add(5);
redpacks4.add(50);
redpacks4.add(30);
redpacks4.add(60);
redpacks4.add(52);
redpacks4.add(26);
redpacks4.add(5);
redpacks4.add(74);
redpacks4.add(83);
redpacks4.add(34);
redpacks4.add(96);
redpacks4.add(6);
redpacks4.add(88);
redpacks4.add(94);
redpacks4.add(80);
redpacks4.add(64);
redpacks4.add(22);
redpacks4.add(97);
redpacks4.add(47);
redpacks4.add(46);
redpacks4.add(25);
redpacks4.add(24);
redpacks4.add(43);
redpacks4.add(76);
redpacks4.add(24);
redpacks4.add(2);
redpacks4.add(42);
redpacks4.add(51);
redpacks4.add(96);
redpacks4.add(97);
redpacks4.add(87);
redpacks4.add(47);
redpacks4.add(93);
redpacks4.add(11);
redpacks4.add(98);
redpacks4.add(41);
redpacks4.add(54);
redpacks4.add(18);
redpacks4.add(16);
redpacks4.add(11);
redpacks4.add(96);
redpacks4.add(34);
redpacks4.add(36);
redpacks4.add(87);
redpacks4.add(24);
redpacks4.add(32);
redpacks4.add(27);
redpacks4.add(62);
redpacks4.add(72);
redpacks4.add(54);
redpacks4.add(14);
redpacks4.add(67);
redpacks4.add(5);
redpacks4.add(21);
redpacks4.add(20);
redpacks4.add(44);
redpacks4.add(55);
redpacks4.add(3);
redpacks4.add(82);
redpacks4.add(19);
redpacks4.add(45);
redpacks4.add(1);
redpacks4.add(52);
redpacks4.add(14);
redpacks4.add(44);
redpacks4.add(46);
redpacks4.add(39);
redpacks4.add(83);
redpacks4.add(27);
redpacks4.add(30);
redpacks4.add(87);
redpacks4.add(61);
redpacks4.add(56);
redpacks4.add(59);
redpacks4.add(10);
redpacks4.add(83);
redpacks4.add(80);
redpacks4.add(42);
redpacks4.add(44);
redpacks4.add(75);
redpacks4.add(39);
redpacks4.add(43);
redpacks4.add(41);
redpacks4.add(23);
redpacks4.add(93);
redpacks4.add(73);
redpacks4.add(50);
redpacks4.add(94);
redpacks4.add(94);
redpacks4.add(82);
redpacks4.add(46);
redpacks4.add(87);
redpacks4.add(60);
redpacks4.add(94);
redpacks4.add(47);
redpacks4.add(52);
redpacks4.add(67);
redpacks4.add(22);
redpacks4.add(50);
redpacks4.add(49);
redpacks4.add(8);
redpacks4.add(9);
redpacks4.add(30);
redpacks4.add(62);
redpacks4.add(87);
redpacks4.add(13);
redpacks4.add(11);
System.out.println(solution(redpacks1) == 14);
System.out.println(solution(redpacks2) == 0);
System.out.println(solution(redpacks3) == 52);
System.out.println(solution(redpacks4) == 2627);
}
}
总结
拥有豆包AI辅助刷题,可以帮助我们有效节省刷题时间、快捷方便、短时间能掌握多道算法题不是梦