leetcode二分查詢

2021-10-07 07:10:36 字數 2481 閱讀 2790

用排除法解二分查詢:

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 ...