二分法
Huglight
这个作者很懒,什么都没留下…
展开
-
LeetCode 287.寻找重复数 二分
题意:有一个n+1个数的数组,每个数都小于等于n,有一个数重复了至少一次,找出这个数,要求空间复杂度O(1),且不能更改原数组思路:根据数组里的数而不是索引二分,即二分答案,找出数组中某个数的出现次数,如果次数大于这个数,那答案就在这个数前面,否则就在后面class Solution { public int findDuplicate(int[] nums) { in...原创 2020-03-04 09:55:43 · 126 阅读 · 0 评论 -
LeetCode 33. 搜索旋转排序数组 二分
题意:给一个旋转数组和一个目标值target,求用O(logn)时间在数组中找出target值思路:首先用二分找到旋转后的开始索引,之后根据目标值和两个子数组大小关系在子数组中再用二分即可。注意找开始索引和找目标值用的二分方法不同class Solution { public int search(int[] nums, int target) { if (nums.l...原创 2020-01-18 23:02:39 · 92 阅读 · 0 评论 -
Codeforces 1223C. Save the Nature 二分 贪心
题意:给n张票的价格pi,每a张票价格的x%用作环保项目1,每b张票价格的y%用作环保项目2,为了使投入环保项目的总额至少为k,求出重新排列票的价格后需要卖出的最少的票数思路:二分票数,用大顶堆来存储票的价格,显然a和b的公倍数位置上应该放最大的价格,其次比较x和y,较大的那个对应的位置上放较大价格,最后把剩余的没放的位置再放剩下的价格,每次从堆中取价格,判断当前票数是否满足价格至少为k,满足则...原创 2019-10-07 16:07:14 · 326 阅读 · 0 评论 -
Codeforces 1201C. Maximum Median 二分答案
题意:给n个数(n为奇数),可以进行操作将某个数加1,最多可以进行k个操作,求出操作过后数列的最大中位数思路:显然排序过后小于当前中位数的值对答案没有影响,故只需对n/2后的元素进行操作即可。二分中位数,对于当前数x,需要进行的操作数等于n/2后的元素和其差值之和,判断当前操作数是否不超过k,求出不满足条件的第一个数即可#include<bits/stdc++.h>using n...原创 2019-09-08 00:37:20 · 212 阅读 · 0 评论 -
POJ 3258 River Hopscotch 最大化最小 二分
题意:0和L处分别为起点和终点,中间有N个点,每个点离起点Di距离,可以删除其中m个点,使得每两个点之间的最小距离变得最大,求这个最大距离思路:二分距离,若两个点之间的距离大于当前距离,删除中间所有点,求出删除点的总数,满足删除点小于等于m的最后一个数即为答案,注意终点和最后一个距离不大于当前距离的点之间的点也要算上#include<iostream>#include<cs...原创 2019-08-27 21:15:19 · 98 阅读 · 0 评论 -
POJ 3579 Median 二分答案
题意:给出一串序列,可以用这些序列值算出C(N,2)个|a[i]-a[j]|值,求出这些值中的中位数思路:对每个数二分,对于每个i在序列中查找存在的大于a[i]+m的数的个数之和,即找出|a[i]-a[j]|<m的数的个数,答案即为个数恰好为C(N,2)/2时的m#include<iostream>#include<cstdio>#include<cma...原创 2019-08-27 19:49:24 · 193 阅读 · 0 评论 -
POJ 3104 Drying 二分答案
题意:给n件衣服,每件衣服带a[i]水分,不用烘干机时,每分钟减少1点水分,用烘干机时,每分钟减少k点水分,求出最少使所有衣服变干的时间思路:时间单调递增,且答案可检验,故可以用二分答案。首先找到最大时间,若k为1,则答案即为最大时间(烘干机跟自然烘干效果一样),否则对时间二分,检验时若当前时间大于当前衣服自然烘干需要时间,直接让其自然烘干,否则看该件衣服能否用机器烘干,用机器烘干可以只烘干一部...原创 2019-08-26 23:05:38 · 200 阅读 · 0 评论 -
POJ 3685 Matrix 二分嵌套
题意:给一个数n,在n*n的矩阵中第i行第j列数等于i² + 100000 × i + j² - 100000 × j + i × j,求这些数中最小的第m个数思路:内层对j二分求比x小的sum个数,外层对每个数x二分,求sum大于等于m的第一个数,复杂度O(log(nlogn))#include<iostream>#include<cstdio>#include&...原创 2019-07-20 11:55:13 · 119 阅读 · 0 评论 -
Codeforces 371C Hamurgers 二分答案
题意:给一种汉堡配方(Bread、Sausage、Cheese),给出店里有的配料,可以去商店买任意配料,给出商店每种配料价格,还有拥有的钱数,求可以做的最多汉堡数思路:用二分法,检验当前钱数是否足够支撑做出当前汉堡数,求出不满足答案的第一个数,即可求出满足答案的最后一个数即最多汉堡数#include<iostream>#include<cstring>#inclu...原创 2019-07-15 22:22:03 · 188 阅读 · 0 评论 -
XDU暑训2019 Day6 POJ2452 ST表
题意:取区间(i, j)为区间内所有数比a[i]大,比a[j]小,求一个序列中j-i最大值思路:用ST表存储各区间最值,枚举每个i,用二分法求不满足条件的i,j的第一个j,即可求出离这个i最远的满足条件的j,取这些i,j中的j-i最大值输出#include<cstdio>#include<cstring>#include<iostream>#inclu...原创 2019-07-08 18:13:15 · 384 阅读 · 0 评论