每日一道演算法題 搜尋插入位置(6 21)

2021-09-24 15:41:59 字數 1362 閱讀 5099

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

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

示例 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)的時間複雜度,但是如果二分的話則可以降低到 o(logn) 的時間複雜度整體思路和普通的二分查詢幾乎沒有區別,先設定左側下標 left 和右側下標 right,再計算中間下標 mid每次根據 nums[mid] 和 target 之間的大小進行判斷,相等則直接返回下標,nums[mid] < target 則 left 右移,nums[mid] > target 則 right 左移

查詢結束如果沒有相等值則返回 left,該值為插入位置時間複雜度:o(logn)o(logn)

二分查詢的思路不難理解,但是邊界條件容易出錯,比如 迴圈結束條件中 left 和 right 的關係,更新 left 和 right 位置時要不要加 1 減 1。

#include#includeint searchinsert(int *nums,int numssize,int target)

else if(nums[mid]①一位陣列初始化:

int *p=(int )malloc(numssizesizeof(int));

int i;

printf(「please input nums:\n」);

for(i=0;i

每日一道 LeetCode 10 搜尋插入位置

每天 3 分鐘,走上演算法的逆襲之路。每日一道 leetcode 前文合集 github gitee 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例...

每日一道演算法題

no.1 設指標變數fron t表示鏈式佇列的隊頭指標,指標變數rear表示鏈式佇列的隊尾指標,指標變數s指向將要入佇列的結點x,則入佇列的操作序列為 a.front next s front s b.s next rear rear s crear next s rear s d.s next f...

每日一道演算法題

no.1 若有 18 個元素的有序表存放在一維陣列 a 19 中,第乙個元素放 a 1 中,現進行二分查詢,則查詢 a 3 的比較序列的下標依次為 a.1,2,3 b.9,5,2,3 c.9,5,3 d.9,4,2,3 答案 d.第一次查詢,隊首為下標1,隊尾下標18,所以是 1 18 2 9 第二...