[杨小白]_leetcode_力扣第 314 场周赛-力扣-第二题

136 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

前言

小白算法比较菜,希望能激励我每日更新,从leetcode第一题开始,2022年目标300题,记录从0到1的全过程!!

力扣第 314 场周赛-力扣

力扣第 314 场周赛-力扣

真是坐牢,a了两题,第三题一直超时,结果排名还是1285,比之前三题的时候排名都高。看来这次确实有点难。

后来发现第三题,我一直把stringbuffer和stringbuilder记反了!!提交的时候用的stringbuffer,换一下就可以过了。。。。虽然也就只能上升个一两百的排名吧,1050左右。唉 又没上成分

image.png

第88双周赛的排名 image.png

第313周赛的排名

image.png

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 <= 105
  • 0 <= pref[i] <= 106

代码

读完这个题,首先想到的就是前缀和和差分数组的思路了,然后自己再纸上推演一下。

image.png

图中给出了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;
    }
}

提交通过截图

image.png

第一题连接如下-2432. 处理用时最长的那个任务的员工

2432. 处理用时最长的那个任务的员工

第三题连接如下-2434. 使用机器人打印字典序最小的字符串

2434. 使用机器人打印字典序最小的字符串

第四题连接如下-2435. 矩阵中和能被 K 整除的路径

2435. 矩阵中和能被 K 整除的路径

3.结束

第四题看了下解析,感觉还是不难的,看了一眼思路,自己敲能做出来。什么时候能ak啊!!!加油,上分!!!!gogogo,刷题刷题,每天一道,三年1000道!!!!