zoukankan      html  css  js  c++  java
  • 力扣剑指offer——数组重复

    一、找出数组中重复的数字

      题目描述:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

      示例:输入:[2, 3, 1, 0, 2, 5, 3]  输出:2 或 3 

      1.解法1——indexOf和lastIndexOf

       思路:遍历数组的每一个元素,判断indexOf和lastIndexOf执行的值是否相等,不相等则说明该元素是重复元素

    var findRepeatNumber = function(nums) { 
        for(let num of nums){ 
            if(nums.indexOf(num) !== nums.lastIndexOf(num)){ 
                return num; 
            }
        }
    };
    

      2.解法2——set

       思路:set自动忽略重复元素,遍历数组中元素,若长度未增加,则输出当前元素

    var findRepeatNumber = function(nums) {
        let s=new Set();
        for(var i in nums){
            var curlen=s.size;
            s.add(nums[i]);
            if(s.size==curlen)
            return nums[i];
        }
    };
    

      3.解法3——map

       思路:利用map构建一个键值对的集合,遍历数组,先在集合中查找当前数组元素,如果存在则返回该重复元素,如果不存在则将该元素设置为键,值为true存入集合中

    var findRepeatNumber = function(nums) {
        let len = nums.length;
        let hash = new Map()
        for(let i=0;i<len;i++){
            if(hash.has(nums[i]))
            return nums[i]
            hash.set(nums[i],true)
        }
    };
    

     

  • 相关阅读:
    Python开发之路-多进程、进程队列、事件驱动模型、IO模型前戏
    Python开发之路
    cookies,sessionstorage,localstorage的区别?
    Linux的nmon监控结果分析文件中网络分析NET
    长字符串写法
    go中语句为什么不用加分号;结束
    %v的使用
    设计模式--装饰器模式
    第一类值VS第二类值
    闭包
  • 原文地址:https://www.cnblogs.com/spoem/p/12832121.html
Copyright © 2011-2022 走看看