1. 程式人生 > 其它 >LeetCode 35. 搜尋插入位置

LeetCode 35. 搜尋插入位置

技術標籤:leetcodeleetcode資料結構演算法java

題目描述: 給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。

你可以假設陣列中無重複元素。
示例 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

來源:LeetCode官網
題目連結

方法1 暴力求解

思路: 根據target去排序數組裡找,找什麼呢,找和target相等的值或者當前值小於target且下一值大於target的值。

程式碼:

class Solution {
    public int searchInsert(int[] nums, int target) {
        int i = 0;
        while(i < nums.length && nums[i] < target)
            i ++;
        return i;
    }
}

分析:
 程式碼簡單,思路明瞭,時間複雜度為* O(n) *,其中n為陣列元素個數。
結果:
在這裡插入圖片描述

方法2 二分查詢

思路: 思路上沒有新奇的,主要是方法問題,使用二分查詢,可以降低複雜度。
程式碼:

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

分析:
 時間複雜度為 O(log n) ,其中n為陣列長度。
結果:
在這裡插入圖片描述

大牛哥哥們還有更多更優的方法,我們共同學習!!