3 数组中的重复数字

 

题目描述

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

Input:
{2, 3, 1, 0, 2, 5}Output:
2

思路

  给出了长度为n且数组内的数字的范围是0-n,0-n的范围恰好是这个数组的索引的范围。思路是遍历整个数组,把值为j的元素放到索引为j的位置上,如果整个数组没有重复,那么在放置的过程中就不会发生冲突。

{3,0,2,1}
{0,1,2,3}

  如果至少有一个元素发生了至少一次冲突,那么置换完毕后的数组的长度肯定小于原有数组的长度。

{3,0,2,2}
{0,2,3}

实现

  这种需要置换的,肯定把置换的方法写出来

    public static void swap(int[]arr,int i,int j){/*** 把数组arr里位置i j的元素交换位置*/int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}

  我的第一版是这样的,看起来好像没啥问题。遍历整个数组,然后把arr[i]位置的元素和arr[arr[i]]位置的元素交换。

   public static boolean isDuplicate(int[] arr){int length = arr.length;for(int i=0; i<=length-1; i++){if(arr[i] == arr[arr[i]])return true;else {swap(arr, i, arr[i]);}}return false;}

  我拿[3,1,0,2]这个数组测试的时候,返回的是true,这显然是不对的。调试之后发现在i=1即循环一次后,数组变成了{3,1,2,0},返回true。返回的条件是arr[1] == arr[arr[1]]。到这里我就看到我这个算法的问题了,我的算法只有在原始数组是完全乱序的前提下才会返回正确的结果,也即我的算法是判断一个数组是否完全乱序。因为{3,1,2,0}中的1处在了正确的位置,所以会导致提前退出。

  错误的原因是我没有考虑到一个数组的arr[i]==i的情况下,也会出现上述的交换冲突。

  public static boolean isDuplicate2(int[] arr){int length = arr.length;for(int i=0; i<=length-1; i++){if(arr[i] == arr[arr[i]] && arr[i] != i)return true;else {swap(arr, i, arr[i]);}}return false;}

 

 

 

转载于:https://www.cnblogs.com/AshOfTime/p/10391657.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小型软件项目开发流程探讨

一&#xff0e;导言国内很多项目都是小型项目, 参与人员少(两到五个人), 要快速交付(一两个月) . 要成功完成这种项目, 除了使用成熟且被团队成员熟练使用的技术之外, 有一个良好的开发流程, 也是很必要的. 二&#xff0e;小型软件项目开发流程下图是我对小型软件项目开发流程…

Vue2的核心原理剖析

✨ 用了这么久的Vue2了你真的 知其然&#xff0c;知其所以然么&#xff1f; ✨今天博主就为大家带来一篇对Vue核心功能的部分剖析\textcolor{pink}{今天博主就为大家带来一篇对Vue核心功能的部分剖析}今天博主就为大家带来一篇对Vue核心功能的部分剖析 ✨后续文章会用更多小案…

Scrum之成败——从自身案例说起,仅供参考

从07年中初次接触Scrum的概念到其中几年项目中逐渐实践CI、TDD&#xff0c;到亲自掌握项目实践Scrum近一年&#xff0c;最终我们放弃了Scrum这个框架和所谓的“自组织”。原因为何&#xff1f; 1.成员放弃了Scrum所“赋予”的“权利” 比如领用任务、评估工作量、自组织协作、决…

sanic官方文档解析之下载和Configuration

1,sanic框架是做什么的? sanic的官方网址:https://sanic.readthedocs.io/en/latest/sanic框架是一个类似于flask框架的在Python3.5以上版本的文本服务器,他能够快速的编写,它是通过惊人的开发效率完成开发,希望通过这篇文章得到激励sanic框架的理念是:简单,高效 sanic的应用如…

首秀 Express 框架

文章目录框架特性express的使用初始化项目&#xff1a;下载框架模块&#xff1a;测试代码&#xff1a;总结以上代码&#xff1a;请求处理的中间件概念&#xff1a;中间件——app.use基本用法&#xff1a;next的用法app.use中间件的应用路由的保护网站维护公告自定义404&#xf…

云原生技能树测评

前言 利用午休后的10多分钟时间&#xff0c;看了看APP的技能树板块&#xff0c;简单的提出几个看法&#xff01; 答题过程 可以设置为闯关类型&#xff0c;答对一道后可以进入下一关&#xff0c;或者是一个章节为一关&#xff0c;让大家一直有一种期待 回答错误数量 可以…

原型和闭包

原型和闭包 一切皆对象 一切皆对象&#xff08;类型值除外&#xff09; undefined, number, string, boolean属于简单的值类型 函数、数组、对象、new Number(10)都是对象。他们都是引用类型 Null是基本数据类型&#xff0c;不是引用数据类型 基本数据类型的值就是它本身的值&a…

python 排序算法

冒泡排序&#xff1a; 1 #coding:utf-82 3 比较相邻的元素&#xff0c;每一趟交换后&#xff0c;最后的元素是最大的。4 第一次比较n-1次&#xff0c;第二次比较n-2次。。。第n-1次比较1次5 进行n-1次冒泡次数6 最优时间复杂度O(n),最坏时间复杂度O(n^2)7 8 9 def bubble_sort…

奖励 CSDN 社区的领军人物

设计动机 领军人物榜单在这里&#xff1a;https://blog.csdn.net/rank/list/role CSDN 是中国 IT 人士学习、成长、成功的平台&#xff0c; 这个平台有很多博主&#xff0c; 博主写的很多优秀文章获得了粉丝。 那么&#xff0c; 博主获得粉丝之后&#xff0c; 博主以粉丝为荣…

一文教会你何为重绘、回流?

文章目录css图层图层创建的条件重绘(Repaint)回流触发重绘的属性触发回流的属性常见的触发回流的操作优化方案requestAnimationFrame----请求动画帧写在最后学习目标&#xff1a; 了解前端Dom代码、css样式、js逻辑代码到浏览器展现过程了解什么是图层了解重绘与回流了解前端层…

mockjs中的方法(三)

1&#xff09;Mock.mock()&#xff1b; Mock.mock( url, type, template, function(options) ); 其中 url 是定义我们要请求的 url 地址&#xff0c;以便于我们请求的时候 mock 去进行拦截&#xff0c;知道我们要去请求那个值&#xff1b;但是它也是可选的&#xff0c;而且格式…

js函数、js对象的这些点你真的懂吗?

本篇学习目标 ✨了解函数&#xff08;高级&#xff09;原型原型链概念\textcolor{green}{了解函数&#xff08;高级&#xff09;原型原型链概念}了解函数&#xff08;高级&#xff09;原型原型链概念 ✨掌握函数作用域\textcolor{green}{掌握函数作用域}掌握函数作用域 ✨掌握…

前端处理跨域的几种方式

什么是跨域&#xff1f; 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源&#xff0c;这里跨域是广义的。 广义的跨域&#xff1a; 1、资源跳转&#xff1a;A链接、重定向、表单提交 2、资源嵌入&#xff1a; <link>、<script>、<img>、<frame&g…

程序员必知的缓存套图

文章目录1. 线程与进程1.1 进程:1.2. 线程:1.3. 关系2. 浏览器内核模块组成4. 事件循环机制5. 缓存5.1. 缓存理解5.2. 缓存分类5.3. 缓存使用示意图5.4. 缓存中的header参数1. 线程与进程 1.1 进程: 进程是计算机中的程序关于某数据集合上的一次运行活动&#xff0c;是系统进…

安装webpack及使用

前言 你是否也是只会运用框架中集成好的Webpack配置呢&#xff1f;你明白每一项的意义么&#xff1f;你懂多少Webpack的个性化配置项呢&#xff1f;本篇文章为你讲解Webpack中的各种配置项参数及作用&#xff01; 文章目录了解Webpack相关开启项目编译打包应用使用webpack配置…

Python基础-os模块 sys模块

sys模块 与操作系统交互的一个接口 文件夹相关 os.makedirs(dirname1/dirname2) 可生成多层递归目录os.removedirs(dirname1) 若目录为空&#xff0c;则删除&#xff0c;并递归到上一级目录&#xff0c;如若也为空&#xff0c;则删除&#xff0c;依此类推os.mkdir(dirnam…

php单例型(singleton pattern)

搞定&#xff0c;吃饭 <?php /* The purpose of singleton pattern is to restrict instantiation of class to a single object. It is implemented by creating a method within the class that creates a new instance of that class if one does not exist. If an obje…

开启关闭各种服务

开启&关闭 Mac版 查找被占用的8080端口&#xff0c;根据pid杀掉进程 查找8080端口 losf -i:8080 根据pid杀掉进程 kill -9 pid iMac:~ acui$ lsof -i:8080 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 62948 ting 93u IPv6 0x6697d6…

助你提高效率的几个Vue指令

前言 很多使用Vue的同学往往最容易忽略的指令&#xff0c;由于在这里考虑到很多初学甚至还没有开始接触Vue的同学呢&#xff0c;在介绍v-clos之前呢就先以大家都熟知的v-model编写小demo v-model 相信大家对v-model并不陌生&#xff0c;简单来讲他就是用于在表单控件以及组建…

掌握Mock摆脱后端同学的束缚

文章目录前言Mock概述mock.js安装Mock规范Mock的使用总结前言 当下采用前后端分离模式开发Web应用已经成为气候&#xff0c;在开发阶段有一个不成文的规定则是 项目开发后端先行 但是作为前端开发工程师的我们&#xff0c;难道在搭建完页面后只能等待后端的接口么&#xff1f;…