zoukankan      html  css  js  c++  java
  • Lc15_三数之和

    //给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复
    //的三元组。 
    //
    // 注意:答案中不可以包含重复的三元组。 
    //
    // 
    //
    // 示例: 
    //
    // 给定数组 nums = [-1, 0, 1, 2, -1, -4],
    //
    //满足要求的三元组集合为:
    //[
    //  [-1, 0, 1],
    //  [-1, -1, 2]
    //]
    // 
    // Related Topics 数组 双指针
    
    package leetcode.editor.cn;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    //Java:三数之和
    public class P15ThreeSum {
        public static void main(String[] args) {
            Solution solution = new P15ThreeSum().new Solution();
            // TO TEST
            int[] nums = {-1, 0, 1, 2, -1, -4};
            List<List<Integer>> res = solution.threeSum(nums);
            res.forEach(n -> {
                n.forEach(m -> {
                    System.out.print(m + " ");
                });
            });
        }
    
        //leetcode submit region begin(Prohibit modification and deletion)
        class Solution {
            public List<List<Integer>> threeSum(int[] nums) {
                if (nums == null || nums.length == 0) {
                    return new ArrayList<>();
                }
                Arrays.sort(nums);
                List<List<Integer>> res = new ArrayList<>();
                for (int i = 0; i < nums.length; i++) {
                    if (i == 0 || (i > 0 && nums[i] != nums[i - 1])) {
                        int l = i + 1;
                        int r = nums.length - 1;
                        while (l < r) {
                            int temp = nums[i] + nums[l] + nums[r];
                            if (temp == 0) {
                                res.add(Arrays.asList(nums[i], nums[l], nums[r]));
                                while (l < r && nums[l] == nums[l + 1]) l++;
                                while (l < r && nums[r] == nums[r - 1]) r--;
                                l++;
                                r--;
                            } else if (temp < 0) {
                                while(l<r && nums[l] == nums[l+1]) l++;
                                l++;
                            } else {
                                while(l<r && nums[r] == nums[r-1]) r--;
                                r--;
                            }
                        }
                    }
                }
                return res;
            }
        }
    //leetcode submit region end(Prohibit modification and deletion)
    
    }
    
  • 相关阅读:
    How to function call using 'this' inside forEach loop
    jquery.validate.unobtrusive not working with dynamic injected elements
    Difference between jQuery.extend and jQuery.fn.extend?
    Methods, Computed, and Watchers in Vue.js
    Caution using watchers for objects in Vue
    How to Watch Deep Data Structures in Vue (Arrays and Objects)
    Page: DOMContentLoaded, load, beforeunload, unload
    linux bridge
    linux bridge
    EVE-NG网卡桥接
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/13293182.html
Copyright © 2011-2022 走看看