[杨小白]_leetcode_力扣第 88 场双周赛-第三题

89 阅读2分钟

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

前言

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

力扣第 88 场双周赛

力扣第 88 场双周赛-力扣

a了三题,2000以内,小上10几分。第一题太离谱了,写O(n)的算法wa了太多次,应该直接暴力的,,,,

image.png

这里放一下312的排名,也是wa了8次 image.png

2425. 所有数对的异或和

给你两个下标从 0 开始的数组 nums1 和 nums2 ,两个数组都只包含非负整数。请你求出另外一个数组 nums3 ,包含 nums1 和 nums2 中 所有数对 的异或和(nums1 中每个整数都跟 nums2 中每个整数 恰好 匹配一次)。

请你返回 nums3 中所有整数的 异或和 。

示例 1

  • 输入:nums1 = [2,1,3], nums2 = [10,2,5,0]
  • 输出:13
  • 解释:
  • 一个可能的 nums3 数组是 [8,0,7,2,11,3,4,1,9,1,6,3] 。
  • 所有这些数字的异或和是 13 ,所以我们返回 13 。

示例 2

  • 输入:nums1 = [1,2], nums2 = [3,4]
  • 输出:0
  • 解释:
  • 所有数对异或和的结果分别为 nums1[0] ^ nums2[0] ,nums1[0] ^ nums2[1] ,nums1[1] ^ nums2[0] 和 nums1[1] ^ nums2[1] 。
  • 所以,一个可能的 nums3 数组是 [2,5,1,6] 。
  • 2 ^ 5 ^ 1 ^ 6 = 0 ,所以我们返回 0 。

提示

  • 1 <= nums1.length, nums2.length <= 105
  • 0 <= nums1[i], nums2[j] <= 109

代码

这个题啊,并没有什么难度,大家要搞清楚亦或运算的计算逻辑。

a^a = 0 a^b^a = a ^ a ^ b = b

如果有n个a亦或,n为偶数的时候答案为0,n为奇数的时候答案为a

  • 所以,对于nums1的每个元素来说,他出现了nums2.length次.
  • 对于nums2的每个元素来说,他出现了nums1.length次.

所以,代码如下

class Solution {
    public int xorAllNums(int[] nums1, int[] nums2) {
        int a = nums1.length % 2;
        int b = nums2.length % 2;
        int res = 0;
        if (b == 1) {
            for (int i = 0; i < nums1.length; i++) {
                res ^= nums1[i];
            }
        } 
        if(a == 1){
            for (int i = 0; i < nums2.length; i++) {
                res ^= nums2[i];
            }
        }
        return res;
    }
}

这个第三题其实算是比较简单的了,基本思路想好了,就没什么问题了。其实对位运算本来就有种莫名的畏惧感,特别是亦或是更不好想的,更畏惧了。。。

第一、二题连接如下-力扣第 88 场双周赛-第一、二题

力扣第 88 场双周赛-第一、二题

3.结束

第四题还是无从下手,我什么时候能成为四题选手啊!!!!gogogo,刷题刷题,每天一道,三年1000道!!!!