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

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

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

相关文章推荐

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

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

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

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

寻找一个数组中的最大和最小数

工作一段快两年了,感觉之前学的数据结构和算法基本忘得差不多了,最近一段时间准备复习一下相关知识。有一个求数组中最大和最小数的题目,基本的思路是遍历一遍数组,然后每个一个元素都和最大值和最小值比较,时间...

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

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

2016阿里笔试题:一个最小数,一个最大数地,重排数组

2017阿里笔试题:一个最小数,一个最大数地,重排数组@(algorithm)问题描述2017阿里笔试题原始数组是排好序的,如:[0,1,2,3,4,5,6]结果数组是一个最小数,一个最大数地重排数组...

正数数组的最小不可组成和

正数数组的最小不可组成和

找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。

【描述】 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。 【输入输出示例】 【C语言】 #include int main() { int ...

找出一个二维数组中的鞍点,即该位置上的元素在该行最大,在该列最小,也可能没有靶点

找出一个二维师数组中的鞍点,即该位置上的元素在该行最大,在该列最小,也可能没有靶点 思路:  找出某行最大数,再判断此数是否是所在列最小 代码:#include int main() {...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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