二分總結
一.
二分從做過的題來說應該可以分為三類:查詢類(
oj上所有二分題)和網上說的排序類(可以用
sort
水過)以及合併類(目前沒有遇到過)。
主要思路:
1.先確定要查詢的物件。
2.再確定
while
迴圈的左右以及停止條件。
下面以幾道
oj的題來總結一下二分。
二.例題1.「
01:查詢最接近的元素」
此題比較水,但還是做的時候想用暴力結果超時給坑了幾次。思路很簡單,就使
left=1
,right=n
來做,查詢
mid與給定數的關係。典型二分題。2.「
03:矩形分割」
初次做這種題比較難想思路,後來老師給看了某李姓大佬的解題思路茅塞頓開。
思路是:將每列的面積用乙個一維數組裝起來後再查詢符合題意的值。考慮到這道題還是較難,寫一下核心函式**。
long long a(longmid)
}
return s1-s2;
}
s1
與s2分別是左右的面積,由於題意左大於右,於是就大於的時候右邊縮小,小於的時候左邊縮小即可。3.「
04:網線主管」
很經典的一道題,後面所有題的思路都和這道題差不多。
考慮到二位小數,就可以想到先乘
100後化為整數計算。下面核心**:
while(min1<=max1)
min1為左,max1為右。以中間值mid為界來計算可以分成的段落。再以分成的段落與題目要求作比較,再確定是該左加還是右減。
二分查詢簡單題
leetcode 35.search insert position 最普通的binary search,若target存在,則返回所在下標 若target不存在,則返回target待插入的位置,本質上就是實現lower bound函式 無論mid left right left 2,還是mid l...
二分答案 簡單題
一 何時可以使用 二分答案 不是任何題目都適合使用 二分答案 的,我sam觀察到一般有以下的一些特徵 a.候選答案必須是離散的 且已知答案的範圍是 最小值min,最大值max 連續區間上不能進行二分操作 例如,在題目 kth largest 第k大的數 中 答案是閉區間 a 1 b 1 a n b ...
二分 簡單題多解法
題目 輸入n n 100,000 個整數,找出其中的兩個數,它們之和等於 整數m 假定肯定有解 題中所有整數都能用 int 解法1 用兩重迴圈,列舉所有的取數方法,複雜度是o n 2 的。for int i 0 i n 1 i for int j i 1 j n j if a i a j m bre...