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)
    
  • 相关阅读:
    源码
    Leetcode 230. 二叉搜索树中第K小的元素 中序遍历
    Leetcode 160. 相交链表 哈希 链表
    Leetcode 142. 环形链表 II
    Leetcode 217. 存在重复元素 哈希 排序
    asp.mvc2.0资料
    关于CRM的介绍
    WPf控件模板缺省样式
    皮肤制作工具
    关于linq的用法
  • 原文地址:https://www.cnblogs.com/Addoil/p/13387113.html
Copyright © 2011-2022 走看看