首页 > 其他 > 详细

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

时间:2020-07-28 00:04:40      阅读:76      评论:0      收藏:0      [点我收藏+]

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

说明:

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

示例 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)

 

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

原文:https://www.cnblogs.com/Addoil/p/13387113.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!