1. 程式人生 > >找出陣列中沒有出現的最小正整數

找出陣列中沒有出現的最小正整數

題目描述:

給定一個無序整型陣列arr,找到陣列中未出現的最小整數
例子

arr=[-1,2,3,4] return 1
arr=[1,2,3,4] return 5

時間複雜度O(n) 空間複雜度O(1)

解題思路: (1) arr為整數1,2,3…N的一個隨機排列,那個未出現的最小正整數就是N+1。

(2) arr中有小於1或者大於N的數出現(我們稱之為“不合法”的數),則未出現的最小正整數一定在1到N中間(因為陣列一共只有N個數,如果出現不合法的數,則出現的1到N之間的數的個數一定小於N,故一定有沒有出現的數)。

實現函式

int missNum(vector<
int>
nums) { int l = 0; // 1-l 已經有 int r = nums.size(); // l+1-r想要有 while (l < r) { if (nums[l] == l + 1) { l++; } // nums[l] 減去 1 表示數nums[l] 應該在的位置 else if (nums[l] < l + 1 || nums[l] > r || nums[nums[l] - 1] == nums[l]) { r--; nums[l] = nums[r]; } else
{ swap(nums[l], nums[nums[l] - 1]); } } return l + 1; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22