zoukankan      html  css  js  c++  java
  • 剑指 Offer 03. 数组中重复的数字——JS

    题目描述

    找出数组中重复的数字。

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

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

    限制:

    2 <= n <= 100000

    解题思路1

    1. 定义一个空数组。
    2. 遍历原数组。
    3. 将传入的原数组的数与新数组中的数进行比较,若新数组中没有该数就将其存入新数组,以便后续比较。有该数说明它是重复的数,返回该数。

    代码1

    /**
     * @param {number[]} nums
     * @return {number}
     */
    const findRepeatNumber = nums => {
        const arr = [];
        for(let i = 0 ; i < nums.length ; i++) {
            if(arr.indexOf(nums[i]) == -1){
                arr.push(nums[i]);
            }else{
                return nums[i];
            }
        }
        return -1;
    };
    

    执行结果

    解题思路2

    题目中已经说了nums中的数都在0~n-1范围内,所以如果不存在重复的数,那么该数应该等于数组下标,当然要在排序之后才能进行。

    代码2

    /**
     * @param {number[]} nums
     * @return {number}
     */
    const findRepeatNumber = nums=> {
      for (let i = 0; i < nums.length; i++ ) {
          let temp;
          let cur = nums[i];
          if (cur !== i) {
            if (cur !== nums[cur]) {
                temp = nums[cur];
                nums[cur] = cur;
                cur = temp;
            } else {
                return cur;
            }
          }
      }
    };
    

    执行结果

  • 相关阅读:
    Nginx配置中运行与启动的详细介绍
    php实现文件上传进度条
    C# 提取逗号分割的字符串
    【sas proc sql】out join
    【SAS NOTE】substr函数
    【sas proc sql】子查询
    【SAS NOTE】数字字符互换
    【SAS NOTE】数组
    【sas Notel】merge
    【sas sql proc】inner join or outer join
  • 原文地址:https://www.cnblogs.com/Monster-su/p/14515984.html
Copyright © 2011-2022 走看看