確定乙個區間,使得目標值一定在這個區間內
從題目中找到一種性質:
根據上述的性質,具體可以把整數二分劃分為兩大類問題第一類:目標值是前半段的右端點將[ l,
r]
[l, r]
[l,r
]分成 [l,
mid−
1]
[l, mid-1]
[l,mid
−1]和[mi
d,r]
[mid, r]
[mid,r
]如果mid
midmi
d處的元素符合前半段性質,則目標值一定在[mi
d,r]
[mid, r]
[mid,r
]之間否則,目標值一定在[l,
mid−
1]
[l, mid-1]
[l,mid
−1]之間
**模版:
while
(l < r)
else
}
第二類:目標值是後半段的左端點
將[ l,
r]
[l, r]
[l,r
]分成 [l,
mid]
[l, mid]
[l,mid
]和[mid
+1,r
][mid+1, r]
[mid+1
,r]如果mid
midmi
d處的元素符合後半段性質,則目標值一定在[l,
mid]
[l,mid]
[l,mid
]之間否則,目標值一定在[mi
d+1,
r]
[mid+1,r]
[mid+1
,r]之間
**模版:
while
(l < r)
else
}
整數二分只有兩種分段情況:l = mid 和 r = mid - 1,此時mid的更新值需要 +1
l = mid + 1 和 r = mid,此時mid的更新值不需要 +1
二分查詢 整數 模版
一段區間,定義一種性質使得區間被一分為二 二分查詢即為尋找滿足性質或不滿足性質的區間的邊界 區間被劃分為 l,mid 和 mid 1,r intbsearch 1 int l,int r 區間被劃分為 l,mid 1 和 mid,r intbsearch 2 int l,int r return l...
二分查詢模版
用於一般的二分查詢 public static intbinsearch2 int arr,int target if arr mid target else return 1 1 為啥是 lo mid 1,hi mid 1 而不是 lo mid,hi mid 呢?看迴圈條件 while lo hi...
二分模版題
給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素k的起始位置和終止位置 位置從0開始計數 如果陣列中不存在該元素,則返回 1 1 輸入格式 第一行包含整數n和q,表示陣列長度和詢問個數。第二行包含n個整數 均在1 10000範圍內 表示完整陣列。接下來q行,每...