网站解析后,福田欧曼图片,刚刚济南发通知,嵌入式软件开发工具的发展趋势是什么力扣每日一题#xff1a;统计和小于目标的下标对数目
开篇 今天这道力扣打卡题写得我好狼狈#xff0c;一开始思路有点问题#xff0c;后面就是对自己的代码到处缝缝补补#xff0c;最后蒙混过关。只能分享一下大佬的代码#xff0c;然后我帮大家分享代码的思路。
题目链… 力扣每日一题统计和小于目标的下标对数目
开篇 今天这道力扣打卡题写得我好狼狈一开始思路有点问题后面就是对自己的代码到处缝缝补补最后蒙混过关。只能分享一下大佬的代码然后我帮大家分享代码的思路。
题目链接: 2824.统计和小于目标的下标对数目
题目描述 代码思路 这道题自己写的时候思路比较混乱于是找了位大佬的代码自己修改完善了一下然后来分析。 1.根据题目的要求我们可以发现如果对nums集合进行排序并不会影响结果所以果断使用sort排序
Collections.sort(nums);我以前只用过数组的sort排序集合的排序我是第一次使用真香
2.然后因为是两个值的运算可以使用双指针法一个从左到右一个从右到左。利用左指针进行for循环然后用while循环进行判断当相加大于目标值时右指针左移直至停止移动此时两个指针的距离就是符合条件的数目。然后左指针右移进行下一个循环。
代码纯享版
class Solution {public int countPairs(ListInteger nums, int target) {if(nums.size() 1) return 0;Collections.sort(nums);int sum 0;for (int i 0, j nums.size() - 1; i j; i) {while (i j nums.get(i) nums.get(j) target) {j--;}sum j - i;}return sum;}
}代码逐行解析版
class Solution {public int countPairs(ListInteger nums, int target) {if(nums.size() 1) return 0; //集合长度小于1数目位0Collections.sort(nums); //对集合进行sort排序int sum 0; //统计数目for (int i 0, j nums.size() - 1; i j; i) { //初始时左指针i0,右指针jnums.size() - 1while (i j nums.get(i) nums.get(j) target) { //让右指针左移到满足要求的位置j--;}sum j - i; //两个指针的距离就是这次循环中满足条件的个数然后i让左指针右移进入下一次循环}return sum;//返回统计数目}
}我的代码
我的思路也是双指针但由于没有和上面的解法一样排除掉一些一定不成立的过程而且思路比较混乱所以就不作为主要思路来分析了。
class Solution {public int countPairs(ListInteger nums, int target) {if(nums.size() 1) return 0;Collections.sort(nums);int left 0, right 1;int sum 0;while(left nums.size() - 1){if(nums.get(left) nums.get(right) target){ //不符合要求时left; right left 1;if(right nums.size() - 1) break;}else if(nums.get(left) nums.get(right) target ){ //符合要求时sum;if(right nums.size() - 1) right; //根据right所在的不同情况就行移动else {left;right left 1;}}}return sum;}
}结语 如果对这道题的分享对您有帮助可以点个关注我会每天更新力扣题目的讲解与大伙儿一起向前迈进