個人學習筆記
初始化 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 無重疊區間 給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。注意 可以認為區間的終點總是大...