是差点运气,可我一直在努力!
当前进程:
开始时间:2020.6.27结束时间:undefined
GitHub仓库:https://github.com/Cundefined/JavaScript-or-TypeScript-for-LeetCode
1、题目要求
( LeetCode-第18题 ) 四数之和
2、解题思路
方法:排序 + 双指针
排序:使得相同的元素靠在一起,方便去重
双指针:固定两个数,
while循环双指针去遍历其他的数
2.1、JavaScript Solution
var fourSum = function (nums
, target
) {
const len
= nums
.length
;
const res
= [];
if (len
=== 0) {
return res
;
}
nums
.sort((a
, b
) => a
- b
);
for (let i
= 0; i
< len
- 3; i
++) {
if (i
> 0 && nums
[i
] === nums
[i
- 1]) {
continue;
}
for (let j
= i
+ 1; j
< len
- 2; j
++) {
if (j
> i
+ 1 && nums
[j
] === nums
[j
- 1]) {
continue;
}
let tempTarget
= target
- nums
[i
] - nums
[j
];
let l
= j
+ 1;
let r
= len
- 1;
while (l
< r
) {
if (nums
[l
] + nums
[r
] === tempTarget
) {
let resItem
= new Array();
resItem
.push(nums
[i
], nums
[j
], nums
[l
], nums
[r
]);
res
.push(resItem
);
l
++;
while (l
< r
&& nums
[l
] === nums
[l
- 1]) {
l
++;
}
r
--;
while (l
< r
&& nums
[r
] === nums
[r
+ 1]) {
r
--;
}
} else if (nums
[l
] + nums
[r
] > tempTarget
) {
r
--;
} else {
l
++;
}
}
}
}
return res
;
};
2.2、TypeScript Solution
function fourSum(nums
: number
[], target
: number
): number
[][] {
const len
: number
= nums
.length
;
const res
: number
[][] = new Array<number
[]>();
if (len
=== 0) {
return res
;
}
nums
.sort((a
, b
) => a
- b
);
for (let i
: number
= 0; i
< len
- 3; i
++) {
if (i
> 0 && nums
[i
] === nums
[i
- 1]) {
continue;
}
for (let j
: number
= i
+ 1; j
< len
- 2; j
++) {
if (j
> i
+ 1 && nums
[j
] === nums
[j
- 1]) {
continue;
}
let tempTarget
: number
= target
- nums
[i
] - nums
[j
];
let l
: number
= j
+ 1;
let r
: number
= len
- 1;
while (l
< r
) {
if (nums
[l
] + nums
[r
] === tempTarget
) {
let resItem
: number
[] = new Array();
resItem
.push(nums
[i
], nums
[j
], nums
[l
], nums
[r
]);
res
.push(resItem
);
l
++;
while (l
< r
&& nums
[l
] === nums
[l
- 1]) {
l
++;
}
r
--;
while (l
< r
&& nums
[r
] === nums
[r
+ 1]) {
r
--;
}
} else if (nums
[l
] + nums
[r
] > tempTarget
) {
r
--;
} else {
l
++;
}
}
}
}
return res
;
}