二分
dezhonger
这个作者很懒,什么都没留下…
展开
-
Leetcode 668, 719
668 找到乘法表里的第k小的树显然是用二分,不过这个题目不是二分m和n的位置,而是二分候选答案,我们知道候选的是在1和m*n之间,对于每个值,我们可以在O(min(m, n))的时间内求出来有多少数比它小时间复杂度是O(min(m, n)*log(m*n)) public int findKthNumber(int m, int n, int k) { ...原创 2020-02-29 17:39:17 · 180 阅读 · 0 评论 -
Leetcode1095
一个先严格上升后严格下降的数组,给出最小的index使arr[index] = target我们可以先找到山峰的位置,然后分别在左边和右边进行二分搜索。刚开始我认为找山峰无法用二分来做,就直接上三分找山峰了。。发现自己太蠢了。。三分法:public class Leetcode1095 { int len; MountainArray arr;...原创 2020-02-23 16:09:16 · 316 阅读 · 0 评论 -
Leetcode528
前缀和&二分查找实现为了方便,数组多开了1位,因此返回的下标也要减去1 int[] s; int sum = 0; Random random; public Solution(int[] w) { s = new int[w.length + 1]; for (int i = 0; i < w.length; ...原创 2020-01-25 20:13:48 · 261 阅读 · 0 评论 -
Leetcode 911
给定一系列给定时间给某人投票,求给定的时间点是谁胜出。sol:保存在投票的时间点胜出者,然后根据询问的时间点二分出答案class TopVotedCandidate { int len; int[][] arr; public TopVotedCandidate(int[] persons, int[] times) { len = pers...原创 2020-01-05 02:01:28 · 96 阅读 · 0 评论 -
Leetcode 1146
支持快照版本的数组 snapshot Array存储每个时间点值,然后二分查找,难点在于二分查到,这个二分不变式条件的把握his[index].get(r)[l] < snap_id < his[index].get(r)[0]public class SnapshotArray { List<int[]>[] his; int ti...原创 2020-01-04 17:04:53 · 200 阅读 · 0 评论 -
Leetcode1300
求整数k,使得原数组比k大的值都变为k,整个数组的和与目标值target的绝对值差最小。注意到:k最大只能是max(a[0], a[1]...), 再大的加话,原数组的值也不会变化,最小的是1我们可以二分来解决这个问题我们维护的区间(l, r)求出使得数组和比target大的最小k,但是最优解可能是比target小一点或大一点就是说public class Leet...原创 2019-12-29 21:04:22 · 241 阅读 · 0 评论 -
nyoj197
left[i]表示第i个动物在 1-r[1]中选的个数, rigth[i]表示在 r[1] + 1 到p中选的个数。原创 2014-07-27 03:51:29 · 440 阅读 · 0 评论