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)
        }
    };
    

     

  • 相关阅读:
    Create方法失效而没有提示错误信息
    JS弹出窗口控制
    本周活动
    JavaScript的初步了解
    关于PHP接收文件的资料
    mvc模式改进网站结构
    一周动态
    排序
    Java的内存泄漏
    Android笔记
  • 原文地址:https://www.cnblogs.com/spoem/p/12832121.html
Copyright © 2011-2022 走看看