当前位置: 首页 > article >正文

LeetCode Hot100 (双指针)

283. 移动零

标记指针,当前位置为0向后面移动即可

 class Solution {public void moveZeroes(int[] nums) {int l = 0;for(int i=0;i<nums.length;i++){if(nums[i]==0){if(l<i){l=i+1;}while(l<nums.length&&nums[l]==0) l++;if(l<nums.length){nums[i]=nums[l];nums[l]=0;l++;}}}String s=nums.toString();System.out.println(s);}
}

 11.成最多水的容器

一个比较简单的做法,我们可以直接从高进行枚举,看看水会淹没到哪个位置,双指针左右移动即可

class Solution {public int maxArea(int[] height) {int maxx=0;for(int i=0;i<height.length;i++){maxx=Math.max(height[i],maxx);}int l=0;int ans=0;int r=height.length-1;int n=r-1;for(int i=1;i<=maxx;i++){while(l<=n&&height[l]<i){l++;}while(r>=0&&height[r]<i){r--;}if(r<=l){break;}ans=Math.max((r-l)*i,ans);}return ans;}
}

15.三数之和

我们注意到数字不能有重复的,我们对数组进行排序之后,固定最左边位置的数字,然后枚举右边的两个数字即可,为了降低时间复杂度,双指针维护

class Solution {public List<List<Integer>> threeSum(int[] nums) {List< List<Integer> >res = new ArrayList<>();Arrays.sort(nums);
//        System.out.println(Arrays.toString(nums));for(int i = 0; i < nums.length ; i++){if(i>0){if(nums[i]==nums[i-1]){continue;}}if(nums[i]>0){continue;}int l=i+1;int r=nums.length-1;while(l<r){while(l<=r&&nums[l]+nums[r]+nums[i]<0){l++;}while(l<r&&nums[l]+nums[r]+nums[i]>0){r--;}if(l>=r){break;}if(nums[i]+nums[l]+nums[r]==0){List<Integer>arr=List.of(nums[i],nums[l],nums[r]);res.add(arr);}l++;while(l<nums.length&&nums[l]==nums[l-1]){l++;}}}return res;}
}

42. 接雨水

最简单的困难题

实际上每一个点看看前面的最大值和后面的最大值,也就是那两个可以把他包围起来,然后两个最大值取个较小值就ok了

class Solution {public  int trap(int[] height) {if(height.length==0){return 0;}int []maxx1=new int[height.length+3];int []maxx2=new int[height.length+3];maxx1[0]=height[0];for(int i=1;i<height.length;i++){maxx1[i]=Math.max(maxx1[i-1],height[i]);}for(int i=height.length - 1;i>=0;i--){maxx2[i]=Math.max(maxx2[i+1],height[i]);}int ans=0;for(int i=1;i<height.length - 1;i++){int f=ans;ans=ans+Math.max(0,Math.min(maxx1[i-1],maxx2[i+1])-height[i]);}return ans;}
}

http://www.lryc.cn/news/2383690.html

相关文章:

  • JVM常量池(class文件常量池,运行时常量池,字符串常量池)
  • 开源免费无广告专注PDF编辑、修复和管理工具 办公学术 救星工具
  • 鸿蒙Flutter实战:24-混合开发详解-4-初始化Flutter
  • 我爱学算法之—— 二分查找(中)
  • Golang 并发小结
  • RTC技术
  • 基于Matlab建立不同信道模型
  • uni-app 排坑
  • 军事目标系列之迷彩作战人员检测数据集VOC+YOLO格式2755张1类别
  • Qt C++实现马的遍历问题
  • node12.22.12在nvm中安装
  • 技术篇-2.3.Golang应用场景及开发工具安装
  • 高效缓存设计的哲学
  • 【生态信息】开源软件全方位解析
  • FastAPI在 Nginx 和 Docker 环境中的部署
  • 计算机网络相关面试题
  • 根据当前日期计算并选取上一个月和上一个季度的日期范围,用于日期控件的快捷选取功能
  • 【C++】set、map 容器的使用
  • 【MySQL】第1节|全面理解MySQL架构
  • YOLOv8模型剪枝笔记(DepGraph和Network Slimming网络瘦身)
  • App Builder技术选型指南:从AI编程到小程序容器,外卖App开发实战
  • TDengine 高可用——三副本
  • el-table高度自适应、数据查询后高度展示错误问题
  • 【蓝桥杯真题精讲】第 16 届 Python A 组(省赛)
  • Java接口设计:ECharts热力图的绘制
  • 深入理解 MongoDB 的 _id 和 ObjectId:从原理到实践
  • C++内存复制
  • 【notepad++如何设置成中文界面呢?】
  • 当AI遇上科研:北大“科学导航”重塑学术探索全流程
  • 大模型在闭合性胫骨平台骨折诊疗全流程中的应用研究报告