LeetCode演算法學習筆記 二分查詢詳解

2021-10-09 18:32:53 字數 1523 閱讀 3687

個人學習筆記

初始化 right = nums.length - 1

搜尋區間是 [left , right]

所以決定了while ( left <= right)

也決定了 left = mid + 1 和 right = mid - 1

只需要 target 的索引即可

所以當 nums[mid] == target時可以立即返回

初始化 right = nums.length

搜尋區間[left , right)

所以決定了while (left < right)

也決定了left = mid +1 和 right=mid

需要找到target的最左側索引

所以nums[mid] == target時不要立即返回

而要收緊右側邊界以鎖定左側邊界

初始化 right = nums.length

搜尋區間[left , right)

所以決定了while (left < right)

也決定了left = mid +1 和 right=mid

需要找到target的最右側索引

所以nums[mid] == target時不要立即返回

而要收緊左側邊界以鎖定右側邊界

收緊左側邊界時必須left = mid + 1

所以最後返回left 還是 right 必須減一

int

binary_search

(int

nums,

int target)

else

if(nums[mid]

>target)

else

if(nums[mid]

==target)

}return-1

;}

int

left_bound

(int

nums,

int target)

else

if(nums[mid]

>target)

else

if(nums[mid]

==target)

}//檢查是否越界

if(left>=nums.length || nums[left]

!=target)

return left;

}

int

left_bound

(int

nums,

int target)

else

if(nums[mid]

>target)

else

if(nums[mid]

==target)

}//檢查是否越界

if(right<

0|| nums[right]

!=target)

return right;

}

演算法學習筆記(二) 初級排序演算法

時間複雜度 time complexity 總運算次數表示式中受n的變化影響最大的那一項 不含係數 注 若演算法中語句執行次數為乙個常數,則時間複雜度為o 1 若t n f n 求極限可得到一常數c,則時間複雜度t n o f n 隨著模組n的增大,演算法執行的時間的增長率和f n 的增長率成正比,...

LeetCode 演算法學習 2

longest substring without repeating characters given a string,find the length of the longest substring without repeating characters.example 1 input ab...

演算法學習(二)

貪心演算法 採用貪心策略,保證每次操作都是區域性最優,從而使得之後結果得到的結果是全域性最優的 也適用於全域性結果是區域性結果的簡單之和 解決 區間問題 分配問題。leetcode 435 無重疊區間 給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。注意 可以認為區間的終點總是大...