給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。
你可以假設陣列中無重複元素。
示例 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 第二...