题解 | #三数之和#

三数之和

https://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711

运行时间:24ms超过95.60% 用Java提交的代码
import java.util.*;
public class Solution {
    public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        // 数组排序
        Arrays.sort(num);
        int len = num.length;
        // 固定第一位数,剩下的两位数使用双指针
        for(int i = 0; i < len - 2; i++){
            int left = i + 1, right = len - 1;
            // 去重
            if(i > 0 && num[i] == num[i - 1]){
                continue;
            }
            while(left < right){
                 if(num[i] + num[left] + num[right] == 0){
                     ArrayList<Integer> path = new ArrayList<>();
                     path.add(num[i]);
                     path.add(num[left]);
                     path.add(num[right]);
                     // 符合条件的数组添加到返回的列表中
                     res.add(path);
                     left++;
                     right--;
                     // 去重 注意使用while循环,重复的数组可能不止一个
                     while(left < right && num[left] == num[left - 1]){
                         left++;
                     }
                     // 去重
                     while(left < right && num[right] == num[right + 1]){
                         right--;
                     }
                 }else if(num[i] + num[left] + num[right] > 0){
                     right--;
                     // 去重
                     while(left < right && num[right] == num[right + 1]){
                         right--;
                     }
                 }else{
                     left++;
                     // 去重
                     while(left < right && num[left] == num[left - 1]){
                         left++;
                     }
                 }
            }
        }
        return res;
    }
}


全部评论

相关推荐

给🐭🐭个面试机会吧:我boss直聘天天有家教跟我打招呼😓
点赞 评论 收藏
分享
2024-12-02 16:21
中南大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务