• LeetCode----15.三数之和


    题目描述

    给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。

    注意:答案中不可以包含重复的三元组。

    示例

    给定数组 nums = [-1, 0, 1, 2, -1, -4],

    满足要求的三元组集合为:

          [
            [-1, 0, 1],
            [-1, -1, 2]
          ]
    

    思路

    初步思路:看作 b + c = -a,变成找2数之和为 -a 的 2 个数

    代码

    class Solution {
        public List<List<Integer>> threeSum(int[] nums) {
            Arrays.sort(nums);
            List<List<Integer>> ans = new LinkedList<>();
            Map<Integer, Integer> map = new HashMap<>();
            for(int i : nums) {
                if(map.containsKey(i)) {
                    map.put(i, map.get(i)+1);
                } else {
                    map.put(i, 1);
                }
            }
            for(int i = 0; i < nums.length; ++i) {
                if(i > 0 && nums[i] == nums[i-1]) {
                    map.put(nums[i], map.get(nums[i])-1);
                    continue;
                }
                int sum = -nums[i];
                map.put(nums[i], map.get(nums[i])-1);
                Set<Integer> set = new HashSet<>();
                for(int j = i+1; j < nums.length; ++j) {
                    if(set.contains(nums[j])){
                        continue;
                    }
                    int t = sum - nums[j];
                    map.put(nums[j], map.get(nums[j])-1);
                    if(map.containsKey(t) && map.get(t) > 0) {
                        set.add(nums[j]); set.add(t);
                        List<Integer> list = new LinkedList<>();
                        list.add(nums[i]); list.add(nums[j]); list.add(t);
                        ans.add(list);
                    }
                    map.put(nums[j], map.get(nums[j])+1);
                }
            }
            return ans;
        }
    }
    
  • 相关阅读:
    ASP.Net请求处理机制初步探索之旅
    ASP.Net请求处理机制初步探索之旅
    ASP.Net请求处理机制初步探索之旅
    NET平台处理HTTP请求
    HTTP.SYS
    ASP.NET页面与IIS底层交互和工作原理
    MUI的一些笔记
    SpringMCV跨域
    servlet跨域
    Git
  • 原文地址:https://www.cnblogs.com/qq188380780/p/13330707.html
Copyright © 2020-2023  润新知