【剑指offer】找出数组中任意一个重复的数字,C++实现
原创博文,转载请注明出处!
# 题目

# 思路
对于长度为n的数组,范围为0~n-1的数字而言,如果不粗在重复数字,则排序后数组元素和数组角标相同。如果存在重复数字,则在排序的过程中会出现不同下标对应相同数字的情况。
举例:
数组2310253,下标0对应的数字是2,数字2与下标0不一致,交换下标0和下标2对应的数字,交换后的结果为1320253;
数组1320253,下标0对应的数字是1,数字1与下标0不一致,交换下标0和下标1对应的数字,交换后的结果为3120253;
数组3120253,下标0对应的数字是3,数字3与下标0不一致,交换下标0和下标3对应的数字,0123253。
数组0123253,下标4对应的数字是2,下标2对应的数字也是2,下标4对应的数字是重复数字。

1 class Solution {
2 public:
3 /*
4 numbers数组
5 length数组长度
6 duplication重复数字
7 */
8 bool duplicate(int numbers[], int length, int* duplication)
9 {
10 // 检查数组边界:空数组/长度小于0
11 if(numbers == nullptr || length <= 0)
12 return false;
13
14 // 检查数组元素:数组元素不符合题干
15 for(int i=0; i<length;++i)
16 {
17 if(numbers[i]<0 || numbers[i]>length-1)
18 return false;
19 }
20
21 /* 找出任意一个重复元素*/
22 for(int i=0;i<length;i++)
23 {
24 while(numbers[i]!=i)
25 {
26 // 查找重复元素
27 if(numbers[i] != numbers[numbers[i]])
28 {
29 int temp = numbers[i];
30 numbers[i] = numbers[temp];
31 numbers[temp] = temp;
32 }
33 else
34 {
35 *duplication = numbers[i];
36 return true;
37 }
38
39 }
40 }
41
42 return false;
43 }
44 };
# 复杂度
- 时间复杂度为O(n)
- 空间复杂度为O(1)
# 测试用例
- 空指针
- 数字超界
- 不包含重复数字
- 包含一个重复数字
- 包含多个重复数字
【剑指offer】找出数组中任意一个重复的数字,C++实现的更多相关文章
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3
// test14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- 剑指offer.找出数组中重复的数字
题目: 给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数 ...
- 剑指Offer 找出字符串中第一个只出现一次的字符
题目描述 找出字符串中第一个只出现一次的字符 如果无此字符 请输出'.' 输入描述: 输入一串字符,由小写字母组成 输出描述: 输出一个字符 输入例子: asdfasdfo 输出例子: o 思路:数组 ...
- 【剑指offer】73.数组中出现次数超过一半的数字
73.数组中出现次数超过一半的数字 知识点:数组:哈希:占领地思想: 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4 ...
- 【剑指offer】找出数组中任意重复的数字(不修改数组),C++实现
原创博文,转载请注明出处! # 题目 在一个长度为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的.请找出数组中任意一个重复的数字,但不能修改输入的数组.例如,如果输入长度 ...
- 【剑指offer】03.数组中重复的数组
剑指 Offer 03. 数组中重复的数字 知识点:数组:哈希表:萝卜占坑思想 题目描述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些 ...
- 《剑指offer》-找到数组中重复的数字
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...
- 【剑指 Offer】03.数组中重复的数字
题目描述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中 ...
- 【剑指offer】50.数组中重复出现的数字
50.数组中重复出现的数字 知识点:数组:Set的不可重复性 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重 ...
随机推荐
- Import SQL into MySQL with a progress meter
There is nice tool called pv # On Ubuntu/Debian system $ sudo apt-get install pv # On Redhat/CentOS ...
- mybatis映射文件_select_resultMap
实体类: Employee.java类: package com.hand.mybatis.bean; public class Employee { private Integer e ...
- UVA 1393 Highways(数学思想)
题意:给你n.m(n,m<=200),问你有多少条非水平.非垂直的直线有多少条经过至少两个点 题解:我们需要枚举的是只画一条线的矩形,对于大小a*b的矩形必须保证gcd(a,b)=1才能不重复 ...
- 使用百度地图LBS创建自定义标注
<body> <div id="allmap"></div> <div class="sel_container" i ...
- JavaScript高级程序设计-读书笔记(7)
第22章 高级技巧 1.高级函数 (1)安全的类型检测 在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式的字符串. ...
- 简单UML
http://www.cnblogs.com/pluviophile/p/7542017.html,看了这篇博文感觉这个例子有用遂搬运过来方便查阅 上面的类图就体现了所需要了解的类的6个基本关系 该类 ...
- vue.js引用出错-script代码块放在head和body中的区别
这篇随笔是为了记录vue.js引用出错的原因,看到最后原来是vue.js代码放在head中不能正常使用,要最后发现要将其放在body中才行... 原来是js代码放在head和body中的区别问题,占个 ...
- 轻量级 HTTP(s) 代理 TinyProxy
J CentOS 下安装 TinyProxy yum install -y tinyproxy 启动.停止.重启 # 启动service tinyproxy start# 停止service ti ...
- stdclass
$item = new stdClass(); $item->goods_id = $item_goods->getID(); $item->goods_name ...
- 解决VS2015中出现类似于error C4996: 'scanf': This function or variable may be unsafe的安全检查错误
用习惯了VS老版本的人当刚使用VS2013的时候可能总遇到类似于这样的错误: error C4996: 'scanf': This function or variable may be unsafe ...