zoukankan      html  css  js  c++  java
  • 259. 3Sum Smaller

    题目:

    Given an array of n integers nums and a target, find the number of index triplets i, j, k with 0 <= i < j < k < n that satisfy the conditionnums[i] + nums[j] + nums[k] < target.

    For example, given nums = [-2, 0, 1, 3], and target = 2.

    Return 2. Because there are two triplets which sums are less than 2:

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

    Follow up:
    Could you solve it in O(n2) runtime?

    链接: http://leetcode.com/problems/3sum-smaller/

    题解:

    要求O(n2)求3sum smaller。这里我们依然用类似3Sum的方法,但由于只需要求count,而不用求出每个组合,我们可以作到O(n2)。方法还是用2个指针前后夹逼,当i, lo, hi这个组合满足条件时,在[lo, hi]这个闭合区间内的所有组合也应该满足条件,所以我们这里可以直接count += hi - lo, 然后lo++,增大三个值的和来继续尝试,假如不满足条件,则hi--来缩小三个值的和。

    Time Complexity - O(n2), Space Complexity - O(1)

    public class Solution {
        public int threeSumSmaller(int[] nums, int target) {
            if(nums == null || nums.length == 0)
                return 0;
            Arrays.sort(nums);
            int count = 0;
            
            for(int i = 0; i < nums.length - 2; i++) {
                int lo = i + 1, hi = nums.length - 1;
                while(lo < hi) {
                    if(nums[i] + nums[lo] + nums[hi] < target) {
                        count += hi - lo;
                        lo++;
                    } else {
                        hi--;
                    }
                }
            }
            
            return count;
        }
    }

    Reference:

    https://leetcode.com/discuss/55602/just-another-pointer-direction-which-think-more-intuitive

    https://leetcode.com/discuss/63016/accepted-and-simple-java-solution-with-detailed-explanation

    https://leetcode.com/discuss/56164/simple-and-easy-understanding-o-n-2-java-solution

    https://leetcode.com/discuss/52424/my-solutions-in-java-and-python

    https://leetcode.com/discuss/52362/11-lines-o-n-2-python

  • 相关阅读:
    致虚极守静笃
    DNS 透明代理
    Java“禁止”泛型数组
    Java和C#语法对比
    JVM 内存区域 (运行时数据区域)
    Java8 使用
    G1收集器的收集原理
    BZOJ 2222: [Cqoi2006]猜数游戏【神奇的做法,傻逼题,猜结论】
    数据结构之网络流入门(Network Flow)简单小节
    BZOJ 1257: [CQOI2007]余数之和sum【神奇的做法,思维题】
  • 原文地址:https://www.cnblogs.com/yrbbest/p/5014972.html
Copyright © 2011-2022 走看看