前言
又是好久没有更新了
正文
问题来源
本问题来自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语言取反操作与其他语言都是有区别的。
总结:
勤思考。
结语
不管怎么样好好加油。