持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情
前言
小白算法比较菜,希望能激励我每日更新,从leetcode第一题开始,2022年目标300题,记录从0到1的全过程!!
力扣第 314 场周赛-力扣
力扣第 314 场周赛-力扣
真是坐牢,a了两题,第三题一直超时,结果排名还是1285,比之前三题的时候排名都高。看来这次确实有点难。
后来发现第三题,我一直把stringbuffer和stringbuilder记反了!!提交的时候用的stringbuffer,换一下就可以过了。。。。虽然也就只能上升个一两百的排名吧,1050左右。唉 又没上成分
第88双周赛的排名
第313周赛的排名
2433. 找出前缀异或的原始数组
给你一个长度为 n 的 整数 数组 pref 。找出并返回满足下述条件且长度为 n 的数组 arr :
pref[i] = arr[0] ^ arr[1] ^ ... ^ arr[i]. 注意 ^ 表示 按位异或(bitwise-xor)运算。
可以证明答案是 唯一 的。
示例 1
- 输入:pref = [5,2,0,3,1]
- 输出:[5,7,2,3,2]
- 解释:从数组 [5,7,2,3,2] 可以得到如下结果:
- pref[0] = 5
- pref[1] = 5 ^ 7 = 2
- pref[2] = 5 ^ 7 ^ 2 = 0
- pref[3] = 5 ^ 7 ^ 2 ^ 3 = 3
- pref[4] = 5 ^ 7 ^ 2 ^ 3 ^ 2 = 1
示例 2
- 输入: pref = [13]
- 输出: [13]
- 解释: pref[0] = arr[0] = 13
提示
1 <= pref.length <= 1050 <= pref[i] <= 106
代码
读完这个题,首先想到的就是前缀和和差分数组的思路了,然后自己再纸上推演一下。
图中给出了res[1]和res[2]的计算方法。
首先res[0]一定等于arr[0]
那么需要res[1]^res[0]=arr[1],两边同时亦或上res[0],由于亦或的性质,左边为res[1]右边为arr[1]^res[0],因为res[0]在上面已经求出来了,所以res[1]可求得
求res[2]时,需要res[2]^res[1]^res[0]=arr[2],左右两边同时亦或上,res[1]和res[0],就可以得到res[2]=arr[2]^res[0]^res[1]
剩下其他位同理。和前缀和数组差分数组思想相同
class Solution {
public int[] findArray(int[] pref) {
int[] res = new int[pref.length];
int sum = pref[0];
res[0] = pref[0];
for (int i = 1; i < pref.length; i++) {
res[i] = sum ^ pref[i];
sum = sum ^ res[i];
}
return res;
}
}
提交通过截图
第一题连接如下-2432. 处理用时最长的那个任务的员工
2432. 处理用时最长的那个任务的员工
第三题连接如下-2434. 使用机器人打印字典序最小的字符串
2434. 使用机器人打印字典序最小的字符串
第四题连接如下-2435. 矩阵中和能被 K 整除的路径
2435. 矩阵中和能被 K 整除的路径
3.结束
第四题看了下解析,感觉还是不难的,看了一眼思路,自己敲能做出来。什么时候能ak啊!!!加油,上分!!!!gogogo,刷题刷题,每天一道,三年1000道!!!!