【第22期】观点:IT 行业加班,到底有没有价值?

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

原创 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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

关于数组的面试题

Chinaunix首页 | 论坛 | 认证专区 | 博客 登录 | 注册      博文     博主    梦醒潇湘loveloveyou1314.blog.chinaunix....

[分类整理IV]微软等100题系列V0.1版:字符串+数组面试题集锦

微软等100题系列V1.0版整理IV:<span style="fon

有关数组的面试题

数组是最基本的数据结构,关于数组的面试题也屡见不鲜,本文罗列了一些常见的面试题,仅供参考,如果您有更好的题目或者想法,欢迎留言讨论。目前有以下18道题目,如有好的题目,随时更新。  数组...

微软等公司数据结构+算法面试100题---数组

1.(原第3题) ---------------------------------------------------------------------- 求子数组的最大和 题目: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,<

[分类整理IV]微软等100题系列V0.1版:字符串+数组面试题集锦

微软等100题系列V1.0版整理IV:<span style="fon
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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