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?
[分析]
延续3Sum & 3Sum Closest的基本套路,先排序输入数组,固定第一个数后在剩余数组区间中寻找所有满足条件的另外两个数,使用two pointers技巧进行寻找。
关键点是一旦找到 i, j 满足nums[i] + nums[j] + nums[k] < target, 因为数组已排序,则(i, j-1, k),(i, j - 2, k)...(i, i+1, k)均是满足条件的解,这些解总共是 j - i个,而无需一个一个check它们。
此外需注意此题不需要去重处理,一开始画蛇添足进行了去重处理……
很开心思路和leetcode讨论版的最佳思路一致~
public class Solution {
public int threeSumSmaller(int[] nums, int target) {
if (nums == null || nums.length < 3)
return 0;
Arrays.sort(nums);
int counter = 0;
int end = nums.length - 3;
for (int k = 0; k <= end; k++) {
int i = k + 1, j = nums.length - 1;
while (i < j) {
int sum3 = nums[i] + nums[j] + nums[k];
if (sum3 < target) {
counter += j - i;
i++;
} else {
while (i < --j && nums[j] == nums[j + 1]);
}
}
}
return counter;
}
}
分享到:
相关推荐
2Sum->3Sum(hash) 2Sum Less Than K->3Sum Closet->3Sum Smaller(两个指针接近) 找到重复的号码 两个指针: 链表循环 BF: DP: 数学: i^0=i;i^i=0 单号->单号2->单号3 n&n-1 例 12。 1 位数 13. 汉明距离 二...
[3Sum Smaller.java]( Smaller.java) Java 1 Java 2 [外星词典.java](Dictionary.java) Java 3 [二叉搜索树Iterator.java](搜索树Iterator.java) Java 4 [二叉树中序遍历.java]( 树中序遍历.java) Java 5 [二叉树级...
16 | [3 Sum Closest](https://leetcode.com/problems/3sum-closest/) | [C++](./C++/3sum-closest.cpp) [Python](./Python/3sum-closest.py) | _O(n^2)_ | _O(1)_ | Medium || Two Pointers 18| [4 Sum]...
股票买卖最佳时机leetcode 结帐解决方案分支解决方案。 话题 问题 地位 数组 1: Add_one_to_number C++ :check_mark_button: Java Python 解释。 2: Beggars_outside_temple C++ Java Python 解释。 3: Bob_and_...
leetcode 答案力码 参考文献 问题:容易 问题·选ぶにあたり、参考になりそうなサイト 蟒の文法解说 问题 src/answer/two_sum.py src/answer/two_sum_2.py src/answer/two_sum_4.py src/answer/running_sum_of_1d_...
首先,我们来看"count-of-smaller-numbers-after-self.py"。这个文件中的问题涉及到排序和二分查找技术,要求在保持数组原顺序不变的情况下,计算每个元素后面有多少个比它小的元素。解决这个问题的关键在于巧妙地...
leetcode 答案力码 每周回顾: 1.快速排序/合并排序 912 - 2. 总和为 K 的子数组的数量 560 - 3. LIS 300 - 4. Kadane 53 - 5. 子数组最大和不大于k sorted_presum = [ 0 ] # add 0 to handle empty list case ans =...
[3Sum Smaller.java]( Smaller.java) Java 6 [4 Sum.java]( Sum.java) Java 7 Java 8 [添加和搜索 Word.java](和搜索 Word.java) Java 9 [添加Binary.java](Binary.java) Java 10 [加两个数II.java]( 两个数II....
java lru leetcode Java算法问题 托管来自 LintCode、LeetCode 等算法问题的 Java 解决方案。 一旦出现新问题或新测试用例,我将尝试...[3Sum Smaller.java]( Smaller.java) Java 6 [4 Sum.java]( Sum.java) 中等的 J
Sum when it comes 2 range: query range & root range, 搞清楚什么变,什么不变,compare的哪个range的mid. Access modifier & inner class: 对于modify不要忘了recursion 的 edge case要return。 248 Count of ...