牛客题霸 NC30 数组中未出现的最小正整数

Posted Starzkg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客题霸 NC30 数组中未出现的最小正整数相关的知识,希望对你有一定的参考价值。

解决方案

Go

版本一

func minNumberdisappered(arr []int) int {
	// write code here
	n := len(arr)
	for i := 0; i < n; i++ {
		for arr[i] > 0 && arr[i] <= n && arr[arr[i]-1] != arr[i] {
			arr[arr[i]-1], arr[i] = arr[i], arr[arr[i]-1]
		}
	}
	for i := 0; i < n; i++ {
		if arr[i] != i+1 {
			return i + 1
		}
	}
	return n + 1
}

版本二

func minNumberdisappered_2(arr []int) int {
	n := len(arr)
	for i := 0; i < n; i++ {
		if arr[i] <= 0 {
			arr[i] = n + 1
		}
	}
	for i := 0; i < n; i++ {
		num := abs(arr[i])
		if num <= n {
			arr[num-1] = -abs(arr[num-1])
		}
	}
	for i := 0; i < n; i++ {
		if arr[i] > 0 {
			return i + 1
		}
	}
	return n + 1
}

func abs(x int) int {
	if x < 0 {
		return -x
	}
	return x
}

参考文章

以上是关于牛客题霸 NC30 数组中未出现的最小正整数的主要内容,如果未能解决你的问题,请参考以下文章

牛客题霸 NC29 二维数组中的查找

牛客题霸 NC22 合并两个有序的数组

牛客题霸 NC19 子数组的最大累加和问题

牛客题霸 NC11 将升序数组转化为平衡二叉搜索树

牛客题霸 NC10 大数乘法

牛客题霸 NC26 括号生成