用排除法解二分查詢:
1、迴圈條件:l考慮什麼情況下mid一定不滿足條件,然後考慮r或者l的取值,判斷依據是左邊區間有沒有可能出現目標元素,右邊條件有沒有可能出現目標元素。
3、mid=l+(r-l)/2,但是出現left=mid的情況,為了避免死循話,要寫成mid=l+(r-l+1)/2
4、如果陣列中不一定會出現目標元素,還應該再判斷一次。
1、找乙個準確值
2、找乙個數第一次出現的位置,最後一次出現的位置
第一次出現的位置:12223
最後一次出現的位置:12223
3、找乙個最接近2的數
todo:
實現 int sqrt(int x) 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。
給定乙個字串s,找出裡面長的重複子區間
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。( 例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 -1 。你可以假設陣列中不存在重複的元素。
思路:排除二分法,根據mid的值可以把區間分為兩部分,乙個有序,乙個無序。再用排除法。
class
solution
int left=
0,right=nums.length-1;
while
(left
else
}//為了跟上面的統一,上面算mid的加了1,認為left,mid-1是有序的,所以後面都減了1
else
else}}
//為了避免出現陣列中不存在target的情況,所以還要再判斷一次
if(nums[left]
==target)
return-1;}}
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。( 例如,陣列 [0,0,1,2,2,5,6] 可能變為 [2,5,6,0,0,1,2] )。編寫乙個函式來判斷給定的目標值是否存在於陣列中。若存在返回 true,否則返回 false。
思路:向前遍歷找到第乙個出現的mid值是錯誤的,也不用這樣做,因為如果mid小於right,前後有重複的數,也不影響,這樣會造成死迴圈。
如果mid和right相等,那麼不知道左右區間哪乙個是嚴格單調的,所以縮減right的值,再次判斷。
public boolean search
(int[
] nums, int target)
int left =0;
int right = len -1;
while
(left < right)
else
}else
if(nums[mid]
> nums[right]
)else
}else
right = right -1;
}}return nums[left]
== target;
}
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。( 例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。請找出其中最小的元素。你可以假設陣列中不存在重複元素。
思路:普普通通排除二分法
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。( 例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。請找出其中最小的元素。
注意陣列中可能存在重複的元素
思路:mid和right相等時縮減right的大小
public int findmin
(int[
] nums)
int l=
0,r=nums.length-1;
while
(lelse
if(nums[mid]
)//當nums[mid]=nums[r]時,縮小r的值繼續判斷
else
}return nums[l]
;}
給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。
思路:
1)動態規劃
2)二分法??????
LeetCode 查詢 二分查詢
給定乙個 n 個元素有序的 公升序 整型陣列 nums 和乙個目標值 target 寫乙個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 1。示例 輸入 nums 1,0,3,5,9,12 target 9 輸出 4 解釋 9 出現在 nums 中並且下標為 4 輸入 nu...
leetcode 二分查詢
leetcode 29 給定兩個整數,被除數dividend和除數divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數dividend除以除數divisor得到的商。演算法設計 用2進製的左移操作,每次對被除數左移1位,比較除數與被除數左移的後的大小關係,並在結果中加上左移...
leetcode 二分查詢
二分查詢基本實現 public intbinarysearch int nums,int key return 1 變種二分查詢,找出陣列中key重複元素最左位置 注意邊界 public intbinarysearch int nums,int key if nums l key return l ...