【问题描述】[中等]5477. 排布二进制网格的最少交换次数

【解答思路】

贪心

限制条件 第一行要求末尾的0要尽量多

  1. 计算每行最后有几个0
  2. 遍历交互 符合条件 第i行的末尾0的数量为n-i-1 统计交换次数
  3. 第i行的末尾0的数量小于n-i-1,不符合条件

时间复杂度:O(N^2) 空间复杂度:O(N)

class Solution {public int minSwaps(int[][] grid) {int n = grid.length;int res = 0;int sum;int[] cnt = new int[n];//计算末尾0的数量for(int i=0;i<n;i++){sum=0;for(int j=n-1;j>=0;j--){if(grid[i][j]==0) sum++;else break;}cnt[i]=sum;}for(int i=0;i<n;i++){if(cnt[i]<n-i-1){for(int j=i+1;j<n;j++){//只要满足条件就可以交换一次,停止了//这里因为cnt[i],i越小,cnt[i]会越大if(cnt[j]>=n-i-1){res+=swap(cnt,i,j);break;}}}}//第i行的末尾0的数量小于n-i-1,不符合条件for(int i=0;i<n;i++){if(cnt[i]<n-1-i) return -1;}return res;}// 由j到i 依次向上交换 并统计次数private int swap(int[] num,int i,int j){int count = 0;while(j>i){int temp = num[j-1];num[j-1] = num[j];num[j]=temp;j--;count++;}return count;}
}

【问题描述】[困难]5478. 最大得分

【解答思路】

双指针

求两个队列相等时可以切换的最大值
双指针模拟a、b队列当前的和

  1. 如果a队列的当前值>b队列的当前值,那么b队列的最大值只能+b队列的当前值了,
    因为本身a>b了,后面会越差越大的,因为他是有序的,把b往后走一位才可能相等
  2. 如果a队列的当前值 < b队列的当前值,那么a队列的最大值只能+a队列的当前值了
  3. 如果相等了,就用两个队列的当前的和的最大值替换原来的值,再加上当前值
    相等时,用两个队列的当前的和的最大值替换原来的值会怀疑这么写不对,他明明是另一个队列的最大值,并不是当前队列的最大值,
    这时你就可以想一下,我走过去另一条队列,再走回来原队列 其实是一样的

时间复杂度:O(N) 空间复杂度:O(1)

class Solution {public int maxSum(int[] nums1, int[] nums2) {int MOD =1000000007;//两个数列的最大值long ans1 = 0, ans2 = 0;//两个数列的下标int i = 0, j = 0;//如果有一个到头了,就不能再用了while (i < nums1.length && j < nums2.length) {//如果num2[j]大了,就不能切换数组了(毕竟是有序数组,后面会越差越多)if (nums1[i] < nums2[j]) {ans1 += nums1[i];i++;//反之,num[i]大了,也一样} else if (nums1[i] > nums2[j]) {ans2 += nums2[j];j++;} else {//如果两个值一样了,就选择最大的那个把两个队列的值替换掉,还要加上当前的值ans1 = Math.max(ans1, ans2) + nums1[i];ans2 = ans1;i++;j++;} }//把第一个序列的或者第二个序列的未完成的完成了while (i < nums1.length) {ans1 += nums1[i];i++;}while (j < nums2.length) {ans2 += nums2[j];j++;}return (int) (Math.max(ans1, ans2) % MOD);}}

【总结】

1. 数组题目不要太过于死板, 要找到特殊的限制条件 用局部的思想代替全局,如5477题目中用末尾0的个数进行统计、用统计的cnt数组计算交换次数
2.有序 双指针是个好东西 找到突破点 困难题目也不难了

参考链接:https://blog.csdn.net/weixin_46285416/article/details/107744218

[周赛第200场][Leetcode][第5477题][第5478题][JAVA][双指针][贪心]相关推荐

  1. C/C++描述 LeetCode 周赛 第199场周赛(阿里云专场)

    C/C++描述 LeetCode 周赛 第199场周赛(阿里云专场)   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN ...

  2. AcWing周赛 72 场 LeetCode单周赛 314 场 总结

    一.LeetCode单周赛 314 场 1.6200.处理用时最长的那个任务的员工 (1)原题链接:力扣https://leetcode.cn/problems/the-employee-that-w ...

  3. 《LeetCode力扣练习》第64题 最小路径和 Java

    <LeetCode力扣练习>第64题 最小路径和 Java 一.资源 题目: 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为 ...

  4. 十、分享一道LeetCode较为简单的单链表题,但是却能激发起练习算法的极大的兴趣

    实现一种算法,找出单向链表中倒数第 k 个节点.返回该节点的值 1.今天在LeetCode练习一道单链表的题(题目如上),虽然不难,但是却极大的触动了我学习算法的兴趣.因为当你看到大神的解法时,你真的 ...

  5. LeetCode 148. Sort List--面试算法题--C++,Python解法

    LeetCode 148. Sort List–面试算法题–C++,Python解法 LeetCode题解专栏:LeetCode题解 LeetCode 所有题目总结:LeetCode 所有题目总结 大 ...

  6. Leetcode刷题第1题:两数之和(基于Java语言)

    ** Leetcode刷题第1题:两数之和(基于Java语言) ** 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 ...

  7. LeetCode算法题-Nth Digit(Java实现)

    这是悦乐书的第215次更新,第228篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第83题(顺位题号是400).找到无限整数序列的第n个数字1,2,3,4,5,6,7,8 ...

  8. 《LeetCode力扣练习》第338题 比特位计数 Java

    <LeetCode力扣练习>第338题 比特位计数 Java 一.资源 题目: 给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ...

  9. 《LeetCode力扣练习》第31题 下一个排列 Java

    <LeetCode力扣练习>第31题 下一个排列 Java 一.资源 题目: 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列. 例如,arr = [1,2,3] ,以下这些都可 ...

最新文章

  1. ACMNO.23 C语言-素数判定 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。 输入 一个数 输出 如果是素数输出prime 如果不是输出not prime
  2. Centos7 设置DNS 服务器
  3. ofbiz之entity 实体解析 扩展 视图 复合列写法
  4. 苹果学生购机优惠_送AirPods!苹果暑季学生优惠收MacBook Air+AirPods
  5. wxWidgets随笔(10)-wxApp类
  6. asp.net core 使用 Redis 和 Protobuf 进行 Session 缓存
  7. UOJ#84-[UR #7]水题走四方【dp】
  8. OpenGL画简单图形
  9. Android UI库书签
  10. Python循环嵌套应用案例一则:判断丑数
  11. input file 上传问题
  12. java4特征_java的四大基本特征
  13. android接推流sdk,Android-SDK推流端说明
  14. 拼多多商品详情接口、拼多多商品基本信息、拼多多商品属性接口
  15. vs 2010 专业版 密钥
  16. insgram 网页分享_instagram网页版登陆使用图文教程
  17. goproxy代理软件 v10.3 轻量级高性能代理软件+链式代理+正向代理+反向代理
  18. Remo Repair PowerPoint(PPT修复工具)v2.0官方版
  19. 5.8G微米波雷达感应方案
  20. photoswipe 移动端PC端兼容图片相册预览

热门文章

  1. PHP之旅4 php 超全局变量
  2. [家里蹲大学数学杂志]第236期钟玉泉复变函数论前六章第二组习题参考解答
  3. 计算char,short,int,long类型变量的取值范围
  4. 在Linux上构建ASP.NET环境-asp.net关注
  5. 分享博文摘要图标【11/16更新】
  6. html title属性无效_【学习教程】使用JavaScript删除CSS属性
  7. npm install引起的项目崩溃(This is probably not a problem with npm,there is likely additional logging outp)
  8. vux 修改 设置 主题 颜色
  9. html不支持ie7,解决IE6/IE7/IE8不支持before,after问题
  10. XP操作系统最优视觉效果