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)
    
  • 相关阅读:
    Django中的request对象和response对象(简单整理)
    Django基础--视图和URL配置
    javascript
    面向对象-01
    JS学习笔记
    云计算基础
    三种网络模式解析
    爬虫小问题
    http协议
    Django之WEB应用
  • 原文地址:https://www.cnblogs.com/Addoil/p/13387113.html
Copyright © 2011-2022 走看看