LeetCode二分查詢問題全集

2021-10-05 16:02:54 字數 4171 閱讀 9037

int

binarysearch

(int

nums,

int target)

else

if(nums[mid]

< target)

else

if(nums[mid]

> target)

}return..

.;}

分析二分查詢的乙個技巧是:不要出現 else,而是把所有情況用 else if 寫清楚,這樣可以清楚地展現所有細節

計算 mid 時需要防止溢位,**中 left + (right - left) / 2 就和 (left + right) / 2 的結果相同,但是有效防止了 left 和 right 太大直接相加導致溢位。

int

binary_search

(int

nums,

int target)

else

if(nums[mid]

> target)

else

if(nums[mid]

== target)

}// 直接返回

return-1

;}intleft_bound

(int

nums,

int target)

else

if(nums[mid]

> target)

else

if(nums[mid]

== target)

}// 最後要檢查 left 越界的情況

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

!= target)

return-1

;return left;

}int

right_bound

(int

nums,

int target)

else

if(nums[mid]

> target)

else

if(nums[mid]

== target)

}// 最後要檢查 right 越界的情況

if(right <

0|| nums[right]

!= target)

return-1

;return right;

}

class

solution

else

if(nums[mid]

>target)

else

if(nums[mid]

==target)

}return-1

;}}

class

solution

if(nums[mid]

>=nums[left]

)else

}else

else}}

return-1

;}}

class

solution

if(nums[mid]

>nums[left]

)else

}else

if(nums[mid]

)else

}else

}return

false;}

}

class

solution

else

if(nums[mid]

)else

}return nums[left];}

}

class

solution

else

if(nums[mid]

)else

}return nums[left];}

}

class

solution

tails[left]

= num;

if(res == right) res++;}

return res;

}}

class

solution

int left =0;

int right = len-1;

while

(leftelse

}return len-left;

}}

class

solution;}

int lastposition =

findlastposition

(nums,target)

;return

newint

;}private

intfindfirstposition

(int

nums,

int target)

else

if(nums[mid]

else

if(nums[mid]

==target)

}// 最後要檢查 left 越界的情況

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

!= target)

return-1

;return left;

}private

intfindlastposition

(int

nums,

int target)

else

if(nums[mid]

> target)

else

if(nums[mid]

== target)

}// 最後要檢查 right 越界的情況

if(right <

0|| nums[right]

!= target)

return-1

;return right;

}}

class

solution

res =

findfrominversedarr

(mountainarr,target,mountaintop+

1,size-1)

;return res;

}private

intfindmountaintop

(mountainarray mountainarr,

int l,

int r)

else

}return l;

}private

intfindfromsortedarr

(mountainarray mountainarr,

int target,

int l,

int r)

else

if(mountainarr.

get(mid)

else}if

(mountainarr.

get(l)

== target)

return-1

;}private

intfindfrominversedarr

(mountainarray mountainarr,

int target,

int l,

int r)

else

if(mountainarr.

get(mid)

>target)

else}if

(mountainarr.

get(l)

== target)

return-1

;}}

class

solution

else

}return

(int

) left;

}}

class

solution

extends

guessgame

return-1

;}}

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