剑指offer03找出重复的数字
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
/** * 思路一: * 使用set,因为set自动忽略重复元素,遍历数组中元素,若长度未增加,则输出当前元素 / var findRepeatNumber = function(nums) { const s = new Set(); for(let i of nums){ let curLenth=s.size; s.add(i); if(s.size==curLenth) return i; } }; /* * 思路二: * 使用哈希表 * 哈希表的结构是:number-boolean,number 就是数组中的数字,boolean 代表数字是否出现过。 * 整体的流程是:遍历数组中的数字,检查是否出现过,如果出现过,那么返回此数字。 / var findRepeatNumber = function(nums) { const map = {}; for (const num of nums) { if (!map[num]) { map[num] = true; continue; } return num; } }; /* * 思路三: * 无脑双 for / var findRepeatNumber = function(nums) { for(let i=0;i<nums.length-1;i++){ for(let j=i+1;j<nums.length;j++){ if(nums[i]==nums[j]) return nums[i]; } } return null; }; /* * 思路四: * 先排序,相邻相同就返回 */ var findRepeatNumber = function(nums) { nums.sort(); for(let i=0;i<nums.length;){ if(nums[i++] == nums[i]) return nums[i]; } return null;