栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数组中重复的数字C++

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数组中重复的数字C++

在一个长度为n的数组里的所有数字都在0到n-1的范围内。
数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1
数据范围:0<=n<=10000 进阶:时间复杂度O(n),空间复杂度O(n)
示例:
输入:[2,3,1,0,2,5,3]
返回值:2
说明:2或3都是对的

题解一:
复杂度分析:
时间复杂度:O(n^2),两层循环
空间复杂度:O(1)
代码如下:

class Solution {
public:
    
    int duplicate(vector& numbers) {
        // write code here
        for(int i=0;i 

运行超时

题解二:排序+遍历(条件:允许修改原数组)
解题思路:
1、对数组进行排序(系统函数:sort()),此步骤时间复杂度O(nlog(n));

(手写堆排序:这个之后学)

2、遍历数组,查看相邻元素是否有相等的,有直接返回结果,此步骤时间复杂度O(n);

复杂度分析:
时间复杂度:O(nlog(n)),上面已经分析出时间复杂度
空间复杂度:O(1)

class Solution {
public:
    
    int duplicate(vector& numbers) {
        // write code here
        sort(numbers.begin(),numbers.end());
        for(int i=0;i 

Sort语法
Sort(start,end,cmp)
(1)start表示要排序数组的起始地址;
(2)end表示数组结束地址的下一位;
(3)cmp用于规定排序的方法,可不填,默认升序。
sort函数没有第三个参数,实现的是从小到大(升序)排列
如何实现从大到小的排序?
这就如前文所说需要在sort()函数里的第三个参数了,告诉程序要从大到小排序。
需要加入一个比较函数compare(),此函数的实现过程如下:

bool compare(int a,int b)
{
    return a>b;
}

这就是告诉程序要实现从大到小的排序的方法

#include
#include
using namespace std;
bool compare(int a,int b)
{   
return a>b;
}
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
for(int i=0;i<10;i++)
cout< 

假设自己定义了一个结构体node

struct node
{    
int a;    
int b;    
double c;
}

有一个node类型的数组node arr[100],想对它进行排序:先按a值升序排列,如果a值相同,再按b值降序排列,如果b还相同,就按c降序排列。就可以写一个比较函数:
以下是代码片段:

bool cmp(node x,node y)
{    
if(x.a!=y.a) return x.ay.b;    
return x.c>y.c;
}

内容参考链接

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/676067.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号