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 condition nums[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?

    此题和three sum不同在于要求小于target的所有个数,此题只能用two pointer来做,还有需要注意,此题和three sum不同,个数里面可以包括重复的元素,所以,不需要排除掉相同的数组值组成的和。举例说明:[-2,-2,0,1,3]答案就是有4个了,而不是两个。代码如下:

    public class Solution {

        public int threeSumSmaller(int[] nums, int target) {

            int count = 0;

            Arrays.sort(nums);

            for(int i=0;i<nums.length-2;i++){

                //if(i!=0&&nums[i]==nums[i-1]) continue;

                int low = i+1;

                int high = nums.length-1;

                while(low<high){

                    if(nums[i]+nums[low]+nums[high]>=target){

                        high--;

                    }else{

                        count+=high-low;

                        low++;

                    }

                }

            }

            return count;

        }

    }

  • 相关阅读:
    100+ Python挑战性编程练习(1)
    python面试题--初级(二)
    python面试题--初级(一)
    centos查看iptables和firewall防火墙状态、开启、关闭防火墙
    Keepalived nginx HA负载均衡
    windows10安装SQLServer 2008 R2详细说明
    CentOS安装mysql5.7
    centOS7.5安装docker
    redis哨兵选举算法--raft
    CentOS7.5安装GitLab及汉化
  • 原文地址:https://www.cnblogs.com/codeskiller/p/6353848.html
Copyright © 2011-2022 走看看