Leetcode 15 3 sum
1337 ワード
この問題の複雑さはO(n^2)である.問題は、もし私が真ん中を取って、それから左右にそれぞれ取ると、重さを落とすのは複雑さを増すことはありませんが、最後にleetcodeの結果はタイムアウトになります.
最後に最適化された解法は、一番左の値を取って、それから2つの後ろの値を取って、このようにいくつかのテクニックで重くすることができて、もう単独で重くする必要はありません
最後に最適化された解法は、一番左の値を取って、それから2つの後ろの値を取って、このようにいくつかのテクニックで重くすることができて、もう単独で重くする必要はありません
public class Solution {
public List> threeSum(int[] nums) {
List> result = new LinkedList>();
if (nums.length < 3) {
return result;
}
Arrays.sort(nums);
for (int i = 0; i < nums.length - 2; i++) {
//
if(i==0 || nums[i] > nums[i-1]) {
int target = -nums[i];
int p = i+1;
int q = nums.length - 1;
while (p target) {
q--;
} else {
List item = new ArrayList();
item.add(nums[i]);
item.add(nums[p]);
item.add(nums[q]);
result.add(item);
p++;
q--;
//
while(p