判断一个数组中没有出现的最小正数

原创 2016年08月30日 14:23:08

下面介绍一种判断一个数组中没有出现的最小正数的方法,要保证效率:

时间复杂度O(n)

空间复杂度O(1)

方法思路:使用数组下标,通过交换,保证数组下标为i的元素值为i+1,即arr[i]=i+1,然后从前往后,不满足此条件的数即为所求。

实现代码:

//判断一个数组中没有出现的最小正数
//时间复杂度O(n),空间复杂度O(1)
#include <iostream>
using namespace std;

int del_min_positive(int *data, int num)
{
	for(int i=0;i<num;++i)
	{
		if(data[i]>=1&&data[i]<=num)
		{
			swap(data[i],data[data[i]-1]);
		}
	}
	for(int i=0;i<num;++i)
	{
		if(data[i]!=i+1)
		{
			return i+1;
		}
	}
	return num+1;
} 

int main()
{
	int arr[]={0,2,3,4,2,5,-3,1};
	cout<<del_min_positive(arr,sizeof(arr)/sizeof(int))<<endl;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

求数组中未出现的最小正整数

【题目】: 给定一个无序整型数组arr,找到数组中未出现的最小正整数。要求时间复杂度为O(N),空间复杂度为O(1)。例如:arr=[-1,2,3,4]。返回1。arr=[1,2,3,4]。返回5。【...
  • zxc123e
  • zxc123e
  • 2015年10月23日 16:59
  • 3442

求数组里不存在的最小正整数

题目: 给定一个长度为N整形数组a[],所有数据为正整数,且允许重复。要求寻找数组中不存在的最小正整数。最初的思路是对数组进行排序,然后再从1开始比对,那个数没出现,它就是答案。这样做效率太低,然后...

数组中未出现的最小正整数

请设计一个高效算法,查找数组中未出现的最小正整数。 给定一个整数数组A和数组的大小n,请返回数组中未出现的最小正整数。保证数组大小小于等于500。 测试样例: [-1,2,3,4...

Java实现-丢失的第一个正整数

给出一个无序的正数数组,找出其中没有出现的最小正整数。 您在真实的面试中是否遇到过这个题?  Yes 样例 如果给出 [1,2,0], return 3 如果...

堆的数据结构能够使得堆顶总是维持最大(对于大根堆)或最小(对于小根堆),给定一个数组,对这个数组进行建堆,则平均复杂度是多少?如果只是用堆的 push 操作,则一个大根堆依次输入 3,7,2,4,1,5,8 后,得到的堆的结构示意图是下述图表中的哪个?

堆的数据结构能够使得堆顶总是维持最大(对于大根堆)或最小(对于小根堆),给定一个数组,对这个数组进行建堆,则平均复杂度是多少?如果只是用堆的 push 操作,则一个大根堆依次输入 3,7,2,4,1,...

一个无序整数数组中找到最长连续序列(Longest Consecutive Sequence)和两个元素使得相差最小

无序数组中查找最长连续序列: 1、最笨的方法,首先将无序数组排序,然后依次遍历查找最长连续序列。时间复杂度为O(nlgn),空间复杂度为O(1)。2、首先将元素存入HashSet,然后逐个遍历原数组...

1、有一个整数数组,求出两两只差绝对值最小

/************************************************************************/ /* 1、有一个整数数组,求出两两只差绝对值最小 ...

1、有一个整数数组,求出两两只差绝对值最小

/************************************************************************/ /* 1、有一个整数数组,求出两两只差绝对值最小 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:判断一个数组中没有出现的最小正数
举报原因:
原因补充:

(最多只允许输入30个字)