LeetCode第15题:三数之和
题目:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 解法一:因为不是很了解链表,直接就翻出答案研究了一下,但其实不懂的地方很少。这个方法其实我理解也是双指针的方法,感觉双指针在某些问题上确实很好用。 ①Arrays.sort(nums); 调用方法实现排序,这个还是要记住的,否则又得自己写了; ②ans.add(Arrays.asList(nums[i],nums[L],nums[R]));添加数组的方法也是之前见过但是不熟的。
class Solution {
public List< List< Integer> > threeSum ( int [ ] nums) {
List< List< Integer> > ans= new ArrayList ( ) ;
int len= nums. length;
if ( len< 3 || nums== null) return ans;
Arrays. sort ( nums) ;
for ( int i= 0 ; i< len; i++ ) {
if ( nums[ i] > 0 ) break ;
if ( i> 0 && nums[ i] == nums[ i- 1 ] ) continue ;
int L= i+ 1 ;
int R= len- 1 ;
while ( L< R) {
int sum= nums[ i] + nums[ L] + nums[ R] ;
if ( sum== 0 ) {
ans. add ( Arrays. asList ( nums[ i] , nums[ L] , nums[ R] ) ) ;
while ( L< R && nums[ L] == nums[ L+ 1 ] ) L++ ;
while ( L< R && nums[ R] == nums[ R- 1 ] ) R-- ;
L++ ;
R-- ;
}
else if ( sum< 0 ) L++ ;
else if ( sum> 0 ) R-- ;
}
}
return ans;
}
}