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

【算法】——双指针算法合集(力扣)

 8e19eee2be5648b78d93fbff2488137b.png

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

第一题:移动零

第二题:复写零

第三题:快乐数

第四题:盛最多水的容器

第五题:有效三角形的个数

第六题:和为s的两个数

第七题:三数之和

第八题:四数之和


 

 

第一题:移动零

283. 移动零 - 力扣(LeetCode)

dc170944f8264779a0529ff8bc82ab4d.png

6dd9fe7273084b61845aacc2605c8a76.png

class Solution {public void moveZeroes(int[] nums) {int dest = -1;int cur = 0;int tem = 0;while(cur < nums.length){if(nums[cur] != 0){dest++;tem = nums[dest] ;nums[dest] = nums[cur];nums[cur] = tem;}cur++;}}
}

第二题:复写零

1089. 复写零 - 力扣(LeetCode)

249c2e799cd2473388d21fce909a5f8e.png

913e5ee615a444928523b49d78e47471.png

class Solution {public void duplicateZeros(int[] arr) {int cur = 0 , dest = -1 , n = arr.length;while(cur <= n){//dest位置不确定所以不能用作判断循环的条件if(arr[cur] != 0){dest++;}else{dest += 2;}if(dest >= n-1){break;}cur++;}if(dest == n){arr[n-1] = 0;dest -= 2;cur--;}//开始从后往前复写while(cur >= 0 ){if(arr[cur] != 0){arr[dest] = arr[cur];cur--;dest--;}else{arr[dest] = arr[cur];dest--;arr[dest] = arr[cur];cur--;dest--;}}}
}

第三题:快乐数

202. 快乐数 - 力扣(LeetCode)

aeba3d1463834acd9af530221afb1078.png

02762e2f156742f98611d3fce4b8a0a9.png

a33cb7dbe06b482b9a087cdc6a3893d7.png

class Solution {public static int sumResult(int n){int sum = 0;while(n != 0){//int tem = n % 10;//sum += tem * tem;sum += Math.pow(n%10,2);n = n/10;}return sum;} public boolean isHappy(int n) {int slow = n ,fast = sumResult(n);while(slow != fast){slow = sumResult(slow);fast = sumResult(sumResult(fast));}return slow == 1;}
}

第四题:盛最多水的容器

11. 盛最多水的容器 - 力扣(LeetCode)

6d0ea7a48fca4af88a38d01616b17e6c.png

1d94eea0dbd84c8aba1245d6d3282a4b.png

class Solution {public int maxArea(int[] height) {int left = 0 ,right = height.length -1 , ret = 0;while(left < right){int v = Math.min(height[left],height[right]) * (right - left);ret = Math.max(ret,v);if(height[left] < height[right]){left++;}else{right--;}}return ret;}
}

第五题:有效三角形的个数

611. 有效三角形的个数 - 力扣(LeetCode)

228e26d7d962483b83c553ba1b02f2e7.png

c7ed088cd3f64b4d8ac1e859ae1bceec.png

class Solution {public int triangleNumber(int[] nums) {int end = nums.length-1;Arrays.sort(nums);int count = 0;for( ; end >= 2 ; end--){int right = end-1;int left = 0;while(left < right){int tem = nums[left] + nums[right];if(tem > nums[end]){count += right - left;right--;}else{left++;}}            } return count;}
}

 

第六题:和为s的两个数

LCR 179. 查找总价格为目标值的两个商品 - 力扣(LeetCode)

bd601b781b184576803517b67f06883e.png

 

8303f5bdfba743fba3a88d5111e094f9.png

class Solution6 {public int[] twoSum(int[] price, int target) {int n = price.length;int left = 0 , right = n-1;int[] car = {-1,-1};while(left < right){int result = sum(price[left],price[right]);if(result < target){left++;}else if(result > target){right--;}else{car[0] = price[left];car[1] = price[right];return car;}}return car;}public int sum(int a , int b){int sum = a + b;return sum;}
}

第七题:三数之和

15. 三数之和 - 力扣(LeetCode)

7c4131c6891446459ae1280f0c087b7c.png1a956207fbf34b489499ac5952970b4f.png

c93304014deb493689333cc6fadef7be.png

07a52397256e46a196d045444ee3c985.png

class Solution {public List<List<Integer>> threeSum(int[] nums) {Arrays.sort(nums);int n = nums.length;List<List<Integer>> ret = new ArrayList<>();for(int i = 0 ; i < n ;){if(nums[i] > 0){break;}int left = i+1 , right = n-1 ,target = -nums[i];while(left < right){int sum = sum(nums[left] , nums[right]);if(sum > target){right--;}else if(sum < target){left++;    }else{ret.add(Arrays.asList(nums[left] , nums[right] , nums[i]));left++;right--;while(left < right && nums[left] == nums[left - 1]){left++;}while(left < right && nums[right] == nums[right + 1]){right--;}}}i++;while(i < n && nums[i] == nums[i-1]){i++;}}return ret;}public int sum(int a , int b){return a+b;}
}

第八题:四数之和

18. 四数之和 - 力扣(LeetCode)

强烈建议先把三数之和看完

86885d57ac144a26a092fc447bb4cedb.pngb5f2282a187f4384afe316c9c019953a.png

5e777747202b437ab2625950f1d58a2c.png

 

class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> list = new ArrayList();Arrays.sort(nums);int n = nums.length;for(int i = 0 ; i < n ; ){//第一层循环遍历固定a遍历数组int a = nums[i];for(int j = i+1 ; j < n ; ){int b = nums[j] , left = j+1 ,right = n-1;long tem = (long)target - a - b;while(left < right){long sum = sum(nums[left],nums[right]);if(sum > tem){right--;}else if(sum < tem){left++;}else{list.add(Arrays.asList(a,b,nums[left],nums[right]));left++;right--;while(left < right && nums[left] == nums[left-1]){left++;}while(right > left && nums[right] == nums[right+1]){right--;}}}j++;while(j < n-2 && nums[j] == nums[j-1]){j++;}}i++;while(i < n-1 && nums[i] == nums[i-1]){i++;}}return list;}public int sum(int a , int b){return a+b;}
}

 

 

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

相关文章:

  • 小猿口算自动PK脚本
  • 蓝桥杯备赛(c/c++)
  • LLM大模型预测耗时的粗略估计以及sft和continue pre-train的区别
  • go和python打包项目对比
  • EmEditor传奇脚本编辑器
  • 基于JAVA+SpringBoot+Vue的实习管理系统
  • Python自定义异常类:实际应用示例之最佳实践
  • 创新设计大师项骅:用卓越才华打造医疗科技新未来
  • 云计算第四阶段 CLOUD2周目 01-03
  • Linux搭建Hadoop集群(详细步骤)
  • MongoDB中如何实现相似度查询
  • F开头的词根词缀:ful
  • 【python开发笔记】-- python装饰器
  • WEB攻防-python考点CTF与CMS-SSTI模板注入PYC反编译
  • Open3D实现点云数据的序列化与网络传输
  • 【C++11】右值引用
  • CSS元素显示类型
  • Flink 介绍(特性、概念、故障容错、运维部署、应用场景)
  • Python+Flask接口判断身份证省份、生日、性别、有效性验证+docker部署+Nginx代理运行
  • 门店收银营销活动打折特价-收银系统源码
  • QTabWidget的每个tab居中显示图标和文本
  • Ubuntu20.04如何安装Microsoft Edge浏览器?
  • 美团Java一面
  • C#中ref关键字和out关键字
  • 贴吧软件怎么切换ip
  • 图像分割恢复方法
  • Ultralytics:YOLO11使用教程
  • 前缀和算法——优选算法
  • YOLO11改进|注意力机制篇|引入HAT超分辨率重建模块
  • 老牛也想吃嫩草,思科为何巨资投入云初创CoreWeave?