力扣练习之缺失数字

我爱海鲸 2024-05-28 22:07:56 初级算法

简介初级算法、其他

原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xnj4mt/

解法一:

class Solution {
    public int missingNumber(int[] nums) {
        int result = 0;
        for (int i = 0 ; i < nums.length; i++) {
            result ^= nums[i] ^ (i+1);
        }
        return result;
    }
}

思路:

a^a=0;自己和自己异或等于0

a^0=a;任何数字和0异或还等于他自己

a^b^c=a^c^b;异或运算具有交换律

从题目中我们知道,数组中有n个数,但我们需要知道从0到n数个,也就是少的哪一个数是谁?

异或运算求解,我们把一个数组将本身异或运算,得到的结果一定是0,如果其中少了一位数,那么异或后的结果必定是少的那位数。

 

解法二:

class Solution {
    public int missingNumber(int[] nums) {
        int length = nums.length;
        int sum = (0+length)*(length+1)/2;
        for (int i = 0 ; i < length; i++) {
            sum -= nums[i];
        }
        return sum;
    }
}

思路:

我们可以直接通过等差数列的求和公式,计算0到n的和,然后用和减去数组中的每一项,最后的结果就是,数组缺失的那一个数字。

 

总结:初级的leecode练习就结束了,接下来就是复习软考相关的内容,特此纪念,2022-10-13。

2024-05-28 start:

解法三(rust):

impl Solution {  
    pub fn missing_number(nums: Vec<i32>) -> i32 {  
        let len = nums.len() as i32;  
        let expected_sum = (0..=len).sum::<i32>(); // 计算期望的和  
        let actual_sum: i32 = nums.iter().sum(); // 计算数组中的和  
          
        // 缺失的数就是期望的和减去数组中的和  
        expected_sum - actual_sum  
    }  
}

思路:同解法二

end

你好:我的2025