贪心
软件园里卖煎饼
以文载意,以理铸心
展开
-
每日一题:871. 最低加油次数
贪心,优先队列问题原创 2022-07-03 15:15:08 · 53 阅读 · 0 评论 -
每日一题:2038. 如果相邻两个颜色均相同则删除当前颜色
解题思路假设一个串为"AAAAA",长度为5,Alice实际的操作次数只能有5-2次,Bob同理因此找出Alice和Bob的可操作次数,谁的可操作次数大谁就能获胜代码class Solution { public boolean winnerOfGame(String colors) { final char[] chars = colors.toCharArray(); int n = colors.length(),low = 0,high = 0;原创 2022-03-22 18:50:07 · 99 阅读 · 0 评论 -
第 262 场周赛 美团T2.2033. 获取单值网格的最小操作数
解题思路贪心思想1.找到所有数的中位数,将所有数字都操作向其逼近,所耗费操作数一定是最小的2.计算当前数字能否通过x,转换为中位数,如果不能转换,说明矩阵无法统一变成同一数字代码class Solution { public int minOperations(int[][] grid, int x) { List<Integer> list = new ArrayList<>(); for (int i=0;i<grid.le原创 2021-12-17 10:59:39 · 68 阅读 · 0 评论 -
每日一题:630. 课程表 III
解题思路1.将所有课程按照结束时间升序排列,最先结束的需要最先学习2.利用优先队列记录当前所花费时间最多的课程,当遇到课程无法完成的情况,则从优先队列中找出花费时间最长的课程,将他放弃代码class Solution { public int scheduleCourse(int[][] courses) { Arrays.sort(courses, new Comparator<int[]>() { @Override原创 2021-12-14 12:32:40 · 229 阅读 · 0 评论 -
第 268 场周赛AutoX T2.2079. 给植物浇水
解题思路简单模拟即可代码class Solution { public int wateringPlants(int[] plants, int capacity) { int step = 0; int curWater = capacity,location = -1; for (int i=0;i<plants.length;i++){ //当前水够 if (curWater >=原创 2021-12-09 19:50:51 · 66 阅读 · 0 评论 -
第269场周赛钛铂数据T3.从数组中移除最大值和最小值
解题思路贪心,每次都采用最操作次数最小的删除策略分情况讨论代码class Solution { public int minimumDeletions(int[] nums) { if (nums.length <= 1){ return nums.length; } int max = Integer.MIN_VALUE,min = Integer.MAX_VALUE; int maxIndex原创 2021-12-08 19:30:29 · 729 阅读 · 0 评论 -
每日一题:1005. K 次取反后最大化的数组和
解题思路贪心解决:有操作时尽量操作小的比如负数,如果负数操作完还有剩余操作数,则将剩余操作数都用于操作最小的数如果剩余操作数%2==0或者数组中包含0那就说明剩下的操作数可以使当前数组不变,直接return sum,如果以上两项都不符合,那其实剩余操作数可以看成对最小的数进行一次取反操作需要注意:取反或取正要加减原来的两倍代码class Solution { //整体思路:有负数时尽量操作最小的负数,没负数时尽量操作最小的正数或者0 public int largestSumAft原创 2021-12-04 15:52:48 · 393 阅读 · 0 评论 -
每日一题:575. 分糖果
解题思路因为妹妹获得糖果最多也就不能超过糖果得一半所以可以统计糖果得种类,在种类数和糖果总数的一半之间取最小值即可代码class Solution { public int distributeCandies(int[] candyType) { Set<Integer> set = new HashSet<>(); for (int i=0;i<candyType.length;i++){ set.add原创 2021-11-01 16:11:27 · 66 阅读 · 3 评论 -
每日一题.881. 救生艇
解题思路贪心代码class Solution { public int numRescueBoats(int[] people, int limit) { Arrays.sort(people); int ans = 0;//救生艇数量 int nums = people.length; int left = 0,right = nums-1; while (nums!=0 && left<=原创 2021-09-03 23:57:23 · 46 阅读 · 0 评论 -
每日一题.1713. 得到子序列的最少操作次数
解题思路讲arr中的值修改成target中对于数字的下标例如target = [6,4,8,1,3,2], arr = [4,7,6,2,3,8,6,1]0,1,2,3,4,5 1,0,5,4,2,0,3然后找出1,0,5,4,2,0,3中的最长上升子序即可代码class Solution { public int minOperations(int[] target, int[] arr) { /* 我们可以用一个哈希表记录ta原创 2021-07-26 11:03:09 · 72 阅读 · 0 评论 -
每日一题.1736. 替换隐藏数字得到的最晚时间
解题思路贪心加枚举代码class Solution { public String maximumTime(String time) { char[] chars = time.toCharArray(); for (int i=chars.length-1;i>=3;i--){ if (chars[i]=='?'){ if (i==chars.length-1){原创 2021-07-24 22:44:07 · 62 阅读 · 0 评论 -
leetcode.1936. 新增的最少台阶数
解题思路贪心,每次都走能走到的高处,只不过需要注意细节代码class Solution { public int addRungs(int[] rungs, int dist) { int high=0,num=0; if(rungs[0]-dist>high){ int dis = rungs[0]-high-dist; int n = dis/dist; if(dis%dist!=原创 2021-07-22 17:13:49 · 74 阅读 · 0 评论 -
每日一题.1877. 数组中最大数对和的最小值
解题思路1.先对数组排序2.可以看看例子[3,5,4,2,4,6] 排序后是[2,3,4,4,5,6]得到的数对为2,6 3,5 4,4即左右边界两两一对,找到最大值即可代码class Solution { public int minPairSum(int[] nums) { Arrays.sort(nums); int ans = 0; for(int i=0,j=nums.length-1;i<j;i++,j--){原创 2021-07-20 09:21:47 · 74 阅读 · 0 评论 -
leetcode1024. 视频拼接
解题思路按照左端点升序右端点降序的顺序先排序以当前能到达的最大值作为条件,找到目前能剪辑的最长时长代码class Solution { public int videoStitching(int[][] clips, int time) { Arrays.sort(clips,new Comparator<int[]>() { @Override public int compare(int[] o1, int[]原创 2021-07-16 16:06:46 · 96 阅读 · 0 评论 -
leetcode1288. 删除被覆盖区间
解题思路按照左端点升序右端点降序的顺序先排序在判断情况1.覆盖2.相交3.无交点代码class Solution { public int removeCoveredIntervals(int[][] intervals) { List<int[]> arrList = new ArrayList<>(); int n = intervals.length; for(int i=0;i<n;i++){原创 2021-07-16 16:06:05 · 72 阅读 · 0 评论 -
leetcode56. 合并区间
解题思路按照左端点升序右端点降序的顺序先排序区间扫描并记录坐标代码class Solution { public int[][] merge(int[][] intervals) { Arrays.sort(intervals,new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { //左原创 2021-07-16 16:05:31 · 47 阅读 · 0 评论 -
leetcode986. 区间列表的交集
解题思路扫描并判断情况代码class Solution { public int[][] intervalIntersection(int[][] firstList, int[][] secondList) { int n1 = firstList.length,n2 = secondList.length; if(n1==0 || n2==0){ return new int[0][0]; } List原创 2021-07-16 16:04:56 · 37 阅读 · 0 评论 -
每日一题1846. 减小和重新排列数组后的最大元素
解题思路先对数组排序,将0处置为1代码class Solution { public int maximumElementAfterDecrementingAndRearranging(int[] arr) { Arrays.sort(arr); int n = arr.length; arr[0]=1; for (int i=1;i<n;i++){ if (Math.abs(arr[i]-arr[i原创 2021-07-15 22:01:06 · 42 阅读 · 1 评论