标签:
给定一个无序整型数组arr,找到数组中未出现的最小正整数。
例如:
arr=[-1,2,3,4]。返回1。
arr=[1,2,3,4]。返回5。
要求时间复杂度为O(N),空间复杂度为O(1)。
public static int missNum(int[] arr) {int l = 0;
int r = arr.length;
while (l < r) {
if (arr[l] == l + 1) {
l++;} else if (arr[l] <= l || arr[l] > r || arr[arr[l] - 1] == arr[l]) {arr[l] = arr[--r];} else {
swap(arr, l, arr[l] - 1);}}return l + 1;
}public static void swap(int[] arr, int index1, int index2) {int tmp = arr[index1];
arr[index1] = arr[index2];arr[index2] = tmp;}
标签:
原文地址:http://www.cnblogs.com/xiaomoxian/p/5189810.html