【劍指offer】面試題53-2.0~n-1中缺失的數字

解題思路

1、如果mid和該數相等,則說明不相等的數在右側,向右邊找

2、如果mid和該數不相等,則分兩種情況判斷

  • 如果mid==0,說明位於數組的第一個元素,則說明缺少的就是mid;如果前一個元素和其下標相等,說明mid爲第一個不相等的數
  • 如果沒有滿足上兩種情況,說明第一個不相等的數在左側,繼續往左找

3、繼續遞歸查找,如果發現left>right,說明沒有找到的這個數,就是第n個數

代碼

class Solution {
public:
	int missingNumber(vector<int>& nums) {
		return getMissIndex(nums, 0, nums.size()-1);
	}
	int getMissIndex(vector<int>& nums, int left, int right)
	{
		if (left > right) return nums.size();//如果最後都沒有找到,說明缺少的就是n
		int mid = left + (right - left) / 2;
		if (nums[mid]==mid)//該數相等,說明第一個不相等的數在右側,往右找
		{
			left = mid + 1;
		}
		else
		{
			if (mid==0||nums[mid-1]==mid-1)
				//mid==0時,且mid!=mid則直接返回
				//前一個相等,則說明該mid爲第一個不相等的數
			{
				return mid;
			}
			else //不滿足上述條件,說明第一個不相等的數在左側,往左找
			{
				right = mid - 1;
			}
		}
		return getMissIndex(nums, left, right);
	}
};
發佈了99 篇原創文章 · 獲贊 19 · 訪問量 8172
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章