标签:去掉 span 情况 循环 有一个 空间 空间复杂度 退出 计数
这是我BIGO前端面试时,面试官给我出的一道题,题目是长度为N的数组,元素大小范围在[1,N-1],只有一个重复的元素,用O(n)的时间复杂度和O(1)的空间复杂度找出来这个重复的元素,
大致思路
1、因为总共有N个数,每个数的范围是1到N-1,只有一个重复的数,所以这些数肯定是连续的
2、把对应的数放到与之对应的位置上去
3、因为这些书不包含0,所以可以一直操作arr[0],把arr[0]上的数字放到对应的位置上去,再把那个位置上的数字放到arr[0]上去
4、如此循环操作,当arr[0]上的数字与对应位置上的数字相等时,就找到了重复的元素
5、最坏的情况下循环N次一定能找出来重复的元素
下面是我整理后的JavaScript代码:
var arr = [8,1,3,10,11,12,13,14,4,2,6,15,7,16,5,9,17,24,18,19,20,21,22,23,31,25,26,27,28,29,30,5]; var count=0;//用来统计循环的次数,可以去掉 while(1) { if(arr[0]==arr[arr[0]])//判断第0位元素与该元素值指向的元素是否相等,如果相等了,就找到重复的了,退出循环 { alert(arr[0]); break; } if(arr[0]!=arr[arr[0]]){ //如果不相等,就交换位置,把第0位置的元素送到与它对应的位置上去 var temp = arr[0]; arr[0]=arr[arr[0]]; arr[temp]=temp; } count++;//循环一次,计数+1 }console.log(count]);
查找数组中重复的唯一元素+时间复杂度O(n)+空间复杂度O(1)
标签:去掉 span 情况 循环 有一个 空间 空间复杂度 退出 计数
原文地址:https://www.cnblogs.com/ourener/p/9736935.html