LeetCode演算法題35:搜尋插入位置解析
阿新 • • 發佈:2018-11-02
給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。
你可以假設陣列中無重複元素。
示例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
這個題給了比較容易的條件,測試樣例沒有重複元素,而且是排序陣列。那麼思路就很好想了,首先肯定是要遍歷的,所以時間複雜度最少也得是O(n),而且這種題也就是這個複雜度了。遍歷的過程如果遇到target就返回索引,如果不等於target則判斷一下是否大於當前值並小於等於下一個值,如果是則返回下一值的索引。最後如果遍歷完之後還沒有返回,那說明只有兩種情況沒有在遍歷中進行判斷,要麼target小於第一個值,要麼大於最後一個值,所以在程式開頭先判斷是否小於等於第一個值,如果是就返回0索引。然後遍歷完之後直接返回陣列長度即可,因為程式如果可以執行到這裡那麼一定是大於最大的那個數。
C++原始碼:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int len = nums.size();
if (target<=nums[0])
return 0;
for (int i=0;i<len-1;i++)
{
if (nums[i]==target)
return i;
if (target>nums[i] && target<=nums[i+1])
return i+1;
}
return len;
}
};
python3原始碼:
class Solution:
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
leng = len(nums)
if target <= nums[0]:
return 0
for i in range(leng-1):
if target == nums[i]:
return i
if target > nums[i] and target <= nums[i+1]:
return i+1
return leng