1. 程式人生 > >LeetCode演算法題35:搜尋插入位置解析

LeetCode演算法題35:搜尋插入位置解析

給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。
你可以假設陣列中無重複元素。
示例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