首页 > 其他分享 >Q32 LeetCode15 三数之和

Q32 LeetCode15 三数之和

时间:2024-06-13 22:11:23浏览次数:20  
标签:nums int 三数 ++ Q32 while LeetCode15 && ans

难点在于不能重复

1.将数组进行排序

2.找到合适组合后将三个指针都要进行向后去重操作

 

 

 1 class Solution {
 2     public List<List<Integer>> threeSum(int[] nums) {
 3         Arrays.sort(nums);
 4         List<List<Integer>> ans = new ArrayList<>();
 5         int n = nums.length;
 6         for (int i = 0; i < n - 2; ++i) {
 7             int x = nums[i];
 8             if (i > 0 && x == nums[i - 1]) continue; // 跳过重复数字
 9             int j = i + 1, k = n - 1;
10             while (j < k) {
11                 int s = x + nums[j] + nums[k];
12                 if (s > 0) k--;
13                 else if (s < 0) j++;
14                 else {
15                     ans.add(List.of(x, nums[j], nums[k]));
16                     j=j+1;
17                     while(j < k&&nums[j] == nums[j - 1]){
18                         j++;
19                     }
20                     //for (j=j+1; j < k && nums[j] == nums[j - 1]; ++j); // 跳过重复数字
21                     k=k-1;
22                      while(j < k&&nums[k] == nums[k + 1]){
23                         k--;
24                     }
25                     //for (k=k-1; k > j && nums[k] == nums[k + 1]; --k); // 跳过重复数字
26                 }
27             }
28         }
29         return ans;
30     }
31 }

 

标签:nums,int,三数,++,Q32,while,LeetCode15,&&,ans
From: https://www.cnblogs.com/cff1/p/18246869

相关文章

  • 代码随想录第7天 |● 454.四数相加II●383. 赎金信●15. 三数之和●18. 四数之和●哈
    题目:454.四数相加Ⅱ思路:0.知道用map,但是map存啥1.暴力法,四层循环遍历哈哈哈哈2.分而治之,化繁为简,四个数组a,b,c,d分成两组,题目求符合要求的元祖个数,所以将a+b的值和出现次数存储,之后遍历查找c+d中0-(c+d)出现的次数,统计为结果时间复杂度:O(n^2)空间复杂度:O(n^2),最坏情况下A......
  • 代码随想录 算法训练营d7 哈希表 Leetcode454 四数相加2 Leetcode383 赎金信 Leetcode
    Leetcode454四数相加2 题目链接简单理解四个数组的数构成元组 相加为0思想:参考力扣第一题两数之和 才用哈希表解决问题通过将ab数组之和存储到哈希表中,并记录次数再通过计算-(c+d)去匹配哈希表如果存在那么count+=次数即可classSolution{publicintfour......
  • 代码随想录算法训练营第七天 | 四数之和、赎金信、三数之和、四数之和2
    代码随想录算法训练营第七天383赎金信https://leetcode.cn/problems/ransom-note/submissions/537782865/383赎金信代码随想录https://programmercarl.com/0383.赎金信.html#思路四数之和2https://leetcode.cn/problems/4sum-ii/四数之和2代码随想录https://programmerca......
  • 旅行第五天【算法】双指针-----三数之和+四数之和
    文章目录一、题目二、算法原理三、编写代码四、题目五、算法原理六、编写代码一、题目链接:三数之和二、算法原理首先是解法一:暴力解法(其实有必要思考一下,不用把程序写出来,写伪代码就可以了,因为优化后算法的代码是建立在暴力解法的基础上的)三个指针,分别依次......
  • LeetCode 第15题:三数之和的解析
    大家好!本文我们将要探索的是LeetCode的第15题:三数之和。我们的目标是在一片数字的海洋中寻找三颗神奇的珍珠,它们的和为零。准备好了吗?让我们一同踏上这段充满挑战和乐趣的旅程吧!文章目录题目介绍解题思路思路1:暴力法思路2:双指针法思路3:哈希表法思路4:回溯法思......
  • 代码随想录算法训练营第七天|454(四数相加||),383(赎金信),15(三数之和),18(四数之和)
    哈希三数之和和四数之和,和两数之和一样,是对一个数组来进行检索。因为要求元组不能重复,需要用多指针的方法来遍历和判断。由于两数之和没有这个要求且要返回下标,所以用了哈希表。但哈希表难以检测是否重复,不如双指针直接。四数相加||是对四个数组来做相加,且不要求元组重复,可用哈......
  • 代码随想录算法训练营第第七天 | 454.四数相加II 、383. 赎金信 、15. 三数之和 、18
    454.四数相加II建议:本题是使用map巧妙解决的问题,好好体会一下哈希法如何提高程序执行效率,降低时间复杂度,当然使用哈希法会提高空间复杂度,但一般来说我们都是舍空间换时间,工业开发也是这样。题目链接/文章讲解/视频讲解:https://programmercarl.com/0454.四数相加II.html......
  • 代码随想录算法训练营第七天 | 454.四数相加II 383.赎金信 15.三数和
    四数相加II题目链接文章讲解视频讲解时间复杂度o(n2)空间复杂度o(n)classSolution{public:intfourSumCount(vector<int>&nums1,vector<int>&nums2,vector<int>&nums3,vector<int>&nums4){unordered_map<int,int>tw......
  • 15.三数之和
    给你一个整数数组 nums ,判断是否存在三元组 [nums[i],nums[j],nums[k]] 满足 i!=j、i!=k 且 j!=k ,同时还满足 nums[i]+nums[j]+nums[k]==0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。 示例1:输入:nums=[-1,0,1......
  • 三数之和
    给你一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=j、i!=k且j!=k,同时还满足nums[i]+nums[j]+nums[k]==0。请你返回所有和为0且不重复的三元组。注意:答案中不可以包含重复的三元组。示例1:输入:nums=[-1,0,1,2,-1,-4]输出:[......