题目描述:给定一个长度为n的整数数组nums,数组中的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 注意:如果某些数字不在0~n-1的范围内,或数组中不包含重复数字,则返回-1; 代码:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <script type="text/javascript"> function find(num) { var n = num.length; //遍历数组判断所有数据是否在0~n-1的范围内 for (var i = 0; i < n; i++) { if (num[i] < 0 || num[i] > n) return -1; } //0 1 2 3 4 5 6 //2 3 1 0 1 5 0 //1 0 2 3 1 5 0 //1 1 2 3 0 5 0 //0 1 2 3 0 5 1 for (var i = 0; i < n; i++) { //判断第i个数是否和i相等,不等就把num[i]放到第num[i]的位置上 if (num[i] != i && num[num[i]] != num[i]) { //swap(num[num[i]],num[i] ) var t = num[num[i]]; num[num[i]] = num[i]; num[i] = t; } //如果第i个数和i不相等而且在num[i]的位置上的数已经有i位置上的数相等就输出 if (num[i] != i && num[num[i]] == num[i]) { return num[i]; } } return -1; } var num = [2, 3, 1, 0, 1, 5, 0]; var a = find(num); console.log(a); </script> </body> </html>