35 搜尋插入位置(C )

2022-07-10 14:21:27 字數 1491 閱讀 4671

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

你可以假設陣列中無重複元素。

示例 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

我們直接遍歷給定排序陣列nums中查詢val值,大致會出現三種情況:

經過上述討論,我們可以將第

二、三情況判斷條件歸結到一起:對於排序陣列,只要當nums[i] >= val,我們就可以返回當前下標。

完整**如下:

class solution 

// 退出迴圈後則直接在陣列末尾插入元素

return num;

}};

注意右區間為開區間,所以初始化左右邊界時,右邊界可以賦值為陣列的長度

實際上該下標是越界的,無法訪問到

int left = 0, right = nums.size();
然後求取中值時取左中值,並且需要注意防止溢位:

int mid = left + (right - left) / 2;
對於中值下標我們與目標值進行比較:

完整**如下:

class solution 

return left;

}};

注意討論的區間為左閉右閉區間,所有右邊界的初始下標必須是確實能夠進行訪問的:

int left = 0, right = num - 1;
關於中值的計算方式類似,但是因為是閉區間,無論nums[mid]target關係如何,都需要對中值mid進行加(減)一操作。

因為雙閉區間的迴圈判斷條件為while (left <= right),所以退出while迴圈後左右邊界的關係為left = right + 1,總共可分為四種情況進行討論:

綜上討論,退出迴圈後關於插入元素下標的選擇,要麼選擇left,要麼選擇right + 1

完整**如下:

class solution 

return right + 1;

}};

35 搜尋插入位置 c

c 實現 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。使用二分法進行查詢。假設插入位置為pos,則有nums pos 1 target nums pos include include using...

35 搜尋插入位置

給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 2 輸出 1 示例 3 輸入 1,3,5,6 7 輸出 4 示例 4 輸入...

35 搜尋插入位置

給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 2 輸出 1 示例 3 輸入 1,3,5,6 7 輸出 4 示例 4 輸入...