
算法
leetCode为主,常见算法
DatDreamer
这个作者很懒,什么都没留下…
展开
-
单调栈,求解 数组区间中最小数*区间和的最大值
题目描述:思路来源:求数组中区间中最小数*区间所有数和的最大值原文写的很好,本文附上Java版本代码,以及自己的注释理解public int getMaxSum(int[] nums) { int maxSum = Integer.MIN_VALUE; int[] preSum = getPreSumArr(nums); // 维持一个单调栈,存下标。 栈内下标对应元素单调非递减 LinkedList<Integer> s原创 2021-04-30 15:36:51 · 436 阅读 · 1 评论 -
leetCode169. 多数元素Boyer-Moore 投票算法
求众数本质上,Boyer-Moore 算法就是找 nums 的一个后缀 sufsuf ,其中 suf[0]suf[0] 就是后缀中的众数。我们维护一个计数器,如果遇到一个我们目前的候选众数,就将计数器加一,否则减一。只要计数器等于 0 ,我们就将 nums 中之前访问的数字全部 忘记 ,并把下一个数字当做候选的众数。直观上这个算法不是特别明显为何是对的,我们先看下面这个例子(竖线用来划分每次...转载 2020-03-13 15:38:54 · 195 阅读 · 0 评论 -
力扣面试题 17.08. 马戏团人塔
马戏团人塔,如本题,要求身高、体重分别递增,且都只能<,不能<=Arrays.sort(person, (a, b) -> a[0] == b[0] ? b[1] - a[1] : a[0] - b[0]);用NlogN的二分查找法完成的最长递增子序列时,身高递增,必须按照身高相同时,体重递减排序,否则会出现多个身高相同,而体重递增的答案,则不符合<的要求。而原因就...原创 2020-03-13 15:04:25 · 348 阅读 · 0 评论