zoukankan      html  css  js  c++  java
  • 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];
            } 
        }
        unreachable!()
    

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

     nums.iter().fold(0, |a, x| a ^ x)
    
  • 相关阅读:
    自定义组件要加@click方法
    绑定样式
    647. Palindromic Substrings
    215. Kth Largest Element in an Array
    448. Find All Numbers Disappeared in an Array
    287. Find the Duplicate Number
    283. Move Zeroes
    234. Palindrome Linked List
    202. Happy Number
    217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/Addoil/p/13387113.html
Copyright © 2011-2022 走看看