[leetcode 259]3Sum Smaller
来源:互联网 发布:自动门机组 淘宝 编辑:程序博客网 时间:2024/05/18 01:37
Question:
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(n^2) runtime?
分析:
题意要求给定一个有n个整数的数组和一个目标数据target,求解在数组中找到满足 0 <= i < j < k < n,且nums[i] + nums[j] + nums[k] < target. 的 三个下标i,j,k组的组数。
可以知道,数组元素的顺序并不影响下标i,j,k对应的三元素数组;比如【1,4,2,3】如果target为7,则i=0,j=2,k=3---【1,3,2】。更改数组顺序【1,2,3,4】下标为i=0,j=1,k=2但是对应的三元素数组仍为【1,2,3】.
所以在解决问题时候可以先将原数组从小到大排序。
此时,i从0开始。而j最初从i+1开始,k从n-1开始,如果nums[i] + nums[j] + nums[k] < target. ,这说明下标k在j~k之间的数组元素都满足要求,然后继续++j开始。否则k--。
代码如下:
<span style="font-size:14px;">class Solution {public: int threeSumSmaller(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); int n = nums.size(), ans = 0, i, j, k; for (int i = 0; i < n - 2; i++) { int j = i + 1, k = n - 1; while (j < k) { if (nums[i] + nums[j] + nums[k] >= target) k--; else { ans += (k - j); j++; } } } return ans; }};</span>
- [leetcode 259]3Sum Smaller
- LeetCode-3Sum Smaller
- [Leetcode]3Sum Smaller
- Leetcode-259. 3 Sum Smaller
- [leetcode] 259. 3Sum Smaller
- [LeetCode]259. 3Sum Smaller
- LeetCode 259. 3Sum Smaller
- LeetCode 359. 3Sum Smaller
- LeetCode 题解(270) : 3Sum Smaller
- [leetcode] 259. 3Sum Smaller 解题报告
- Leetcode 259. 3Sum Smaller (Medium) (cpp)
- [Leetcode] 259. 3Sum Smaller 解题报告
- [LeetCode259]3Sum Smaller
- 3Sum Smaller
- 3Sum Smaller
- 259. 3Sum Smaller
- 259. 3Sum Smaller
- LeetCode 259. 3Sum Smaller(三数值和)
- CocoaPods详解之----制作篇
- tomcat性能调优
- DFS深度优先搜索
- 一个Testview上显示经纬度
- Hust oj 1992 比赛积分(01背包)
- [leetcode 259]3Sum Smaller
- css初始化
- 几组超神奇的网页应用代码要你在IE浏览器任意打开一个网站,然后在浏览器上输入如下代码神奇的代码,可随意修改复制页面内容!
- System Permissions --1.4
- 浅谈 MVP in Android
- 【杭电】[1022]Train Problem I
- poll函数
- BZOJ3876/AHOI2014支线剧情
- 利用Java异或技操作给任意的文件加密