题解 | #三数之和#

三数之和

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

import java.util.*;
public class Solution {
    public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
        ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
        Arrays.sort(num);
        //记录上一次值
        int number = -200;
        for(int i = 0;i<num.length;i++){
            //如果当前值和上一次值重复直接跳过
            if(num[i] == number){
                continue;
            }
            number = num[i];
            //双指针
            int left = i+1,right = num.length-1;
            while(left<right){
                //相等时,将值加入数组,双指针移动
                if(num[left] + num[right] + number == 0){
                    ArrayList<Integer> list = new ArrayList<>();
                    list.add(num[left]);
                    list.add(num[right]);
                    list.add(number);
                    ans.add(list);
                    left++;
                    right--;
                    //判断移动后的指针与前面是否相同,若相同一直移动
                    while(left<right && num[left] == num[left-1]) left++;
                    while(left<right && num[right] == num[right+1]) right--;
                //小于零左指针右移
                }else if(num[left] + num[right] + number < 0){
                    left++;
                //大于零右指针左移
                }else{
                    right--;
                }
            }
        }
        return ans;
    }
    
}
全部评论

相关推荐

07-25 10:31
门头沟学院 Java
求问各位大佬,笔试都考点啥
投递科大讯飞等公司10个岗位
点赞 评论 收藏
分享
06-23 11:28
门头沟学院 Java
牛客91966197...:也有可能是点拒绝的时候自动弹的话术
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务