Search Insert Position

標(biāo)簽: C++ 算法 LeetCode 數(shù)組 二分查找

每日算法——leetcode系列


問題 SeSearch Insert Position

Difficulty: Medium

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.

Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        
    }
};

翻譯

查找插入位置

難度系數(shù):中等

給定一個有序數(shù)組和一個目標(biāo)值,如果數(shù)組中能找到此目標(biāo)則返回索引。如果不能,返回它應(yīng)該被插入的位置的索引。

假設(shè)數(shù)組中沒有重復(fù)項。

以下是一些示例。

[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0

思路

相當(dāng)于標(biāo)準(zhǔn)庫std::lower_bound的實現(xiàn)

跟前面一個題類似, 只不過binarySearch沒有找到不能返回-1, 而是返回low 或者high

代碼

// 直接調(diào)用lower_bound
class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        return lower_bound(nums.begin(), nums.end(), target) - nums.begin();
    }
};

// 二分法實現(xiàn)
class Solution {
public:
    int searchInsert(vector<int> &nums, int target) {
        if (nums.empty()){
            return 0;
        }
        int low = 0;
        int high = (int)(nums.size() - 1);
        return binarySearch(nums, low, high, target);
    }
    
private:
        
    int binarySearch(vector<int> nums, int low, int high, int target){
        
        while (low <= high) {
            int mid = low + (high - low)/2;
            if (nums[mid] == target) {
                return mid;
            }
            if (target > nums[mid]) {
                low = mid + 1;
            }
            if (target < nums[mid]) {
                high = mid - 1;
            }
        }
        return low;
    }
};

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容