这是我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)的更多相关文章

  1. 查找数组中重复项的index

    var ary = [5, 4, 4, 2, 7, 8, 33, 2222, 99, 88]; function isRepeat(arr) { var hash = {}; for (var i=0 ...

  2. JS数组常用函数以及查找数组中是否有重复元素的三种常用方法

    阅读目录: DS01:常用的查找数组中是否有重复元素的三种方法 DS02:常用的JS函数集锦 DS01.常用的查找数组中是否有重复元素的三种方法  1. var ary = new Array(&qu ...

  3. Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un

    ylbtech-Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素 1.返回顶部 1. Java 实例 - 查找数组中的重复元素  Java 实例 以下实例 ...

  4. PHP 获取重复数组中 第二多的元素

    $target = ["重复项目", "repeat", "repeat", "重复", "重复项目" ...

  5. php 去除数组中重复元素

    去除数组中重复元素, 找了下可以一下两个函数 php array_flip()与array_uniqure() $arr = array(…………) ;// 假设有数组包含一万个元素,里面有重复的元素 ...

  6. 用JS编写一个函数,返回数组中重复出现过的元素

    用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: , , , , , , , ]; var getRepeat = function (arr) { var obj = {}; , le ...

  7. (python)剑指Offer:数组中重复的数字

    问题描述 在长度为n的数组中,所有的元素都是0到n-1的范围内. 数组中的某些数字是重复的,但不知道有几个重复的数字,也不知道重复了几次,请找出任意重复的数字. 例如,输入长度为7的数组{2,3,1, ...

  8. 【剑指Offer】面试题03. 数组中重复的数字

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

  9. 【剑指offer】50.数组中重复出现的数字

    50.数组中重复出现的数字 知识点:数组:Set的不可重复性 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重 ...

随机推荐

  1. MYSQL mybatis

     mysql 1 每个语句的结束记得加分号; 2where条件里再做if分支 SELECT *FROM `table` WHERE IF( `parentID` is null, `plan_id` ...

  2. java第四次上机

    package bbb;public class Person { private String name; private int age; public Person(){ } public Pe ...

  3. webstrom

    1.webstrom如何在左边显示多个工程 File-> Settings -> Directories -> Add Content Root,选择你要加入的Project 点击O ...

  4. Vue2.0增删改查案例(Vue+Less+LocalStorage)

    本人写的小程序,功能还在完善中,欢迎扫一扫提出宝贵意见!           Vue+Less+LocalStorage 安装Less:npm install less less-loader --s ...

  5. 中国建设工程造价管理系统 http://zaojiasys.jianshe99.com/cecaopsys/

    建造师造价管理系统漏洞提示: 可以绕过,直接进入后台,为了安全起见,我就不多说了,. 里面的数据,从小学,中学,高中,大学,户口,电话,身份等, 很全, 本人没有破坏任何数据,

  6. EXCE 表格导入导出遇到问题(easypoi)

    使用Easypoi进行excel表格的导入导出遇到的问题: 1.导出时候打开文件一直遇乱码,主要的原因就是我在实体类没有进行给每个字段进行注解,就会导致每个字段找不到对应的汉字表头,所以一定不要忘了导 ...

  7. project euler做题记录

    ProjectEuler_做题记录 简单记录一下. problem 441 The inverse summation of coprime couples 神仙题.考虑答案为: \[\begin{a ...

  8. 正试图在os加载程序锁内执行托管代码。不要尝试在DllMain或映像初始化函数内运行托管代码 问题解决方法

    方法一把vs菜单的 调试->异常->Managed Debuggin Assistants->LoaderLock

  9. mysql 插件相关命令

    # 查看mysql的插件 show plugins \G # 安装mysql 插件 INSTALL PLUGIN spartan SONAME 'ha_spartan.so'; # 卸载 UNINST ...

  10. day1 登录

    #!/usr/bin/env python #Author:windtalker import os, getpass import sqlite3 from time import ctime pr ...