LeetCode Medium : Search Insert Position

題目:https://leetcode.com/problems/search-insert-position/

  • 典型的二分查找實現思路
    但是需要注意,這裏相當於要在數組中查找最小的、大於等於目標值的元素下標,注意更新左邊界條件的方式,之前寫的一篇博文中介紹了怎樣更新邊界以避免死循環bug。

另外還要注意,對於目標值是大於原數組中最大值和最小值得情況要特殊考慮。

我AC的代碼,18.71% JAVA。

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

Discuss

  1. 代碼優化
    在討論部分看到一份 beats 98% 的python代碼,在二分中間比較時插入了比較多的比較,以使二分能夠較快的結束。
    這種比較在目標位置位於兩端是會比較快,但是如果靠近中間,則會額外多一些比較次數。

  2. 擴展性
    代碼對於duplicate元素的存在的情況也能支持,不過返回的是最小值,如果需要返回最大值,則需要採用 查找大於目標值的最小值的元素。

發佈了59 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章