### 题:找出数组中重复的数字。 >`题`:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。  >**题中的第一个测试用例** >**以及需要引入的头文件** >**可以将下面的方法直接放进去测试** ```cpp #include
#include
#include
#include
using namespace std; int findRepeatNumber(vector
&nums){ size_t slow = 0, fast = 1; while (fast != nums.size()) { if (nums[slow++] == nums[fast++]) return nums[slow]; } return -1; } int main(){ vector
nums{ 2, 3, 1 , 0 , 2 , 5 , 3 }; findRepeatNumber(nums); return 0; } ``` # 方法1: **//两个for循环,,最后时间超了** ```cpp //method 1: int findRepeatNumber(vector
& nums) { for(int i=0;i
& nums) { sort(nums.begin(), nums.end()); vector
::iterator slow = nums.begin(); vector
::iterator fast = slow++; while (fast != nums.end() ) { if (*fast == *slow) cout << *fast; return *slow; fast++; slow++; } return -1; } ``` # 方法3: **sort排序后,利用下标,判断相邻是否相对** ```cpp //method 3: int findRepeatNumber(vector
& nums) { sort(nums.begin(), nums.end()); size_t slow = 0, fast = 1; while (fast != nums.size()) { if (nums[slow++] == nums[fast++]) return nums[slow]; } return -1; } ``` # 方法4: **//利用无序map,借用重载的[]赋值操作;pair
//value的值进行判断 value 可为bool char等,只要能作为标记即可** ```cpp //method 4: int findRepeatNumber(vector
& nums) { std::unordered_map
u_map; for(auto e:nums){ if(u_map[e]>0) return e; u_map[e]++; } return -1; } ``` # 方法5: **//通过判断 nums[i] i nums[nums[i]] 的关系** ```cpp //method 5: int findRepeatNumber(vector
& nums) { int i = 0; while (i < nums.size()) { if (nums[i] == i) { ++i; continue; } if (nums[i] == nums[nums[i]]) return nums[i]; swap(nums[i], nums[nums[i]]); } return -1; } ``` 
微信关注我们
原文链接:https://blog.51cto.com/u_14982125/2897803
转载内容版权归作者及来源网站所有!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
相关文章
发表评论
资源下载
更多资源Mario,低调大师唯一一个Java游戏作品
马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。
Apache Tomcat7、8、9(Java Web服务器)
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Java Development Kit(Java开发工具)
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
Sublime Text 一个代码编辑器
Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。