题目
无序数组查找比K大确不存在数组中的最小正整数。
说明
数组arr=[]string{5,2,4,8},k=1,则结果为3。
代码
func TestFindMissing(t *testing.T) {
for i, tc := range []struct {
target int
arr []int
k int
}{
{
target: 9,
arr: []int{8, 7, 6, 10, 11, 32, 12, 13},
k: 5,
},
} {
ret := findMissingLatestK(tc.arr, tc.k)
if tc.target != ret {
t.Errorf("test(NO.%d)=%d,want matches=%d", i, ret, tc.target)
continue
}
}
}
func findMissingLatestK(arr []int, k int) int {
for i := range arr {
resetPositionOnce(i, arr, k)
}
return fetchLatestK(arr, k)
}
func fetchLatestK(arr []int, k int) int {
ret := k + len(arr) + 1
for i := range arr {
if arr[i] != k+i+1 {
ret = k + i + 1
break
}
}
return ret
}
func resetPositionOnce(i int, arr []int, target int) {
k := arr[i]
for k > target && k <= target+len(arr) {
p := k - target - 1
if arr[p] == k {
return
}
arr[p], k = k, arr[p]
}
}