題目大意:河流的起點終點各有一塊石頭,然後這兩個石頭中間又有n塊石頭,問去點m塊石頭後最大的最小距離是多少。(即存在一種去除m塊石頭的方法,使在該情況下所有石頭間的最小距離,在所有的去除m塊石頭的情況下的最小石頭間距中最小)
題目解法:這個題我是通過二分法來求解的,通過對總長l進行二分,然後判斷mid(將距離小於mid的左側石頭全部去掉,最後判斷剩下的石頭是否比目標多),判斷後再更新left或者right,因為這裡全部是整數,所以直+1/-1就可以了。
這個題目的關鍵在於,當判斷mid時剩下的石頭符合條件時,還要繼續運算,因為要找最大值,所以又引入了乙個變數result,用來儲存結果,如果在mid情況下剩下的石頭要大於等於目標值,則令結果等於mid,left=mid+1(這裡要大於等於的目標是為了求最大的最小值)。
**部分:
#include
#include
int l,m,n;
int distance[
5000];
intjudge
(int mid)
}return sum>=n-m;
}int
compare
(const
void
* a,
const
void
* b)
intmain()
qosrt
(distance,n,
sizeof
(distance[0]
),compare)
;int left=
0,right=l,result=
0,mid=0;
while
(left>=right)
else
}printf
("%d\n"
,result)
;return0;
}
其實二分麻煩的地方就是迴圈條件的判斷以及迭代式子的書寫,大體寫出來,然後再自己調整就可以了。
努力努力再努力x
leetcode演算法專題訓練 七 查詢專題
33.搜尋旋轉排序陣列題目描述 公升序排列的整數陣列 nums 在預先未知的某個點上進行了旋轉 例如,0,1,2,4,5,6,7 經旋轉後可能變為 4,5,6,7,0,1,2 請你在陣列中搜尋 target 如果陣列中存在這個目標值,則返回它的索引,否則返回 1 每乙個數都是獨一無二的。解題思路 二...
成績查詢 結構體專題
有一學生成績表,包括學號 姓名 3門課程成績。請實現如下查詢功能 輸入乙個學生的學號,輸出該學生學號 姓名 3門課程成績 首先輸入乙個整數n 1 n 100 表示學生人數 然後輸入n行,每行包含乙個學生的資訊 學號 12位 姓名 不含空格且不超過20位 以及3個整數,表示3門課成績,資料之間用空格隔...
BUPT複試專題 樹查詢 2011
有一棵樹,輸出某一深度的所有節點,有則輸出這些節點,無則輸出empty。該樹是完全二叉樹。輸入有多組資料。每組輸入乙個n 1 n 1000 然後將樹中的這n個節點依次輸入,再輸入乙個d代表深度。輸出該樹中第d層得所有節點,節點間用空格隔開,最後乙個節點後沒有空格。示例1 4 1 2 3 4 2 2 ...