LeetCode - 搜尋插入位置
阿新 • • 發佈:2021-01-06
技術標籤:LeetCode
搜尋插入位置
題目描述
給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。
你可以假設陣列中無重複元素。
示例 1:
輸入: [1,3,5,6], 5
輸出: 2
示例 2:
輸入: [1,3,5,6], 2
輸出: 1
示例 3:
輸入: [1,3,5,6], 7
輸出: 4
示例 4:
輸入: [1,3,5,6], 0
輸出: 0
題目分析
- 陣列是已經排序好的
- 陣列中無重複數字,但是插入的數字可能會和陣列中的數字重複
- 若插入數字與陣列中數字重複則返回該索引
解析
暴力破解
- 遍歷陣列,判斷目標數字與當前位置數字的大小關係,進而進行位置查詢
int searchInsert(int* nums, int numsSize, int target)
{
for (i = 0; i < numsSize; i++)
{
/* 遍歷每個元素,一旦目標小於等於當前元素,說明目標正確的位置即為當前位置 */
if (target <= nums[i])
return i;
}
return i; // 大於陣列內的所有元素
}
二分法查詢
- 因為陣列是有序的,因此可以直接獲取當前陣列中間位置對應的數值,判斷與目標數字的大小關係
- 如果目標值小於中間值,則更新right位置
- 如果目標值大於中間值,則更新right位置
- 如果相等則返回mid值
程式碼實現
int searchInsert(int* nums, int numsSize, int target)
{
int left = 0;
int right = numsSize;
int mid = 0;
while(left < right) // 二分查詢的退出條件
{
mid = left + (right - left) / 2; //計算中間值位置
if (target <= nums[mid]) //判目標與中間值大小關係
right = mid;
else
left = mid + 1;
}
return left;
}