leetcode260只出现一次的数字III

leetcode 260 Single Number III

Posted by BY on June 15, 2020

前言

又是好久没有更新了

正文

问题来源

本问题来自leetcode上的260题。

问题描述

给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。

示例 1:

输入: [1,2,1,3,2,5]
输出: [3,5]

分析:

看网上解答写的

func singleNumber(nums []int) []int {
    sum := 0
    for _, v := range nums {
        sum ^= v
    }
    ret := make([]int, 2)
    // 关键在于这个地方
    sum = sum & (^(sum-1))
    for _, v := range nums {
        if v & sum == 0 {
            ret[0] ^= v
        } else {
            ret[1] ^= v
        }
    }
    return ret
}

写了第一个用rust解的算法题

impl Solution {
    pub fn single_number(nums: Vec<i32>) -> Vec<i32> {
        let mut sum:i32 = 0;
        for i in &nums {
            sum ^= i;
        }
        sum = sum & (!(sum-1));
        let mut ret = vec![0, 0];
        for i in &nums {
            if i & sum == 0 {
                ret[0] ^= i;
            } else {
                ret[1] ^= i;
            }
        }
        ret
    }
}

要注意golang和rust语言取反操作与其他语言都是有区别的。

总结:

勤思考。

结语

不管怎么样好好加油。