Rust 只出现一次的数字 两种解法

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

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

示例 2:

输入: [4,1,2,1,2]
输出: 4

第一种自己写的想法比较简单leetcode 耗时 0ms; 我感觉有问题,可能会多一点。

解决思路:

仔细审题发现每个元素均出现两次,也就是说经过排序后一定会有下面三种情况出现

abbcc  在最左边

bbacc  在最中间,出现在中间这种情况长度一定超过或等于5

bbcca  在最右边

下面是代码,通过比对 i-1,1-2 和 i+1 , i+2 的大小,确定上述形式

    let mut v = nums;
    v.sort();
    let len = v.len();
    if len == 1 {
        return v[0];
    }
     if v[0]!=v[1]&&v[1]==v[2]{
        return v[0];
     }
     if v[len-3]==v[len-2]&&v[len-2]!=v[len-1]{
        return v[len-1];
     }
    for i in 2..len-2  {
        if v[i-1] == v[i-2] && v[i+1] ==v[i+2] {
           return v[i];
        } 
    }
    return 0

 第二种使用异或运算一行代码解决

 nums.iter().fold(0, |a, x| a ^ x)

猜你喜欢

转载自www.cnblogs.com/Addoil/p/13387113.html