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