1. 程式人生 > >LeetCode Week 1

LeetCode Week 1

35. Search Insert Position

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

You may assume no duplicates in the array.

Example 1:

Input: [1,3,5,6], 5
Output: 2

Example 2:

Input: [1,3,5,6], 2
Output: 1

Example 3:

Input: [1,3,5,6], 7
Output: 4

Example 4:

Input: [1,3,5,6], 0
Output: 0


solution:
本題目是要求給一個有序陣列和一個目標值,在陣列中如果找到目標,則返回索引。如果沒有,則返回如果按順序插入的索引。我覺得可以直接遍歷一遍陣列,找到大於等於目標的值,則返回當前索引,若遍歷完無滿足要求的值,則說明目標值比陣列中最後的值還大,需插入到陣列最後一位,直接返回陣列長度即可。

class Solution {
public:
    int searchInsert(vector
<int>
& nums, int target) { for(int i = 0; i < nums.size(); i++) { if(nums[i] >= target) { return i; } } return nums.size(); } };

至於優化部分可以採用二分法查詢來優化它的時間複雜度。

class Solution {
public:
    int searchInsert(vector<int
>& nums, int target) { if (nums.back() < target) return nums.size(); int left = 0, right = nums.size() - 1; while (left < right) { int mid = left + (right - left) / 2; if (nums[mid] == target) return mid; else if (nums[mid] < target) left = mid + 1; else right = mid; } return right; } };

這裡寫圖片描述