目录
3Sum
解法一
中心思想:遍历排序好的数组,选定一个数,然后剩下的数组用TwoSum的方法。
TwoSum
Arrays.asList使用:
1. 一般使用方法
String[] myArray = {
"Apple", "Banana", "Orange" };
List<String> myList = Arrays.asList(myArray);
//or
List<String> myList = Arrays.asList("Apple", "Orange");
2. 常见错误
2.1 :将原生数据类型数据的数组作为参数
public class Test {
public static void main(String[] args) {
int[] myArray = {
1, 2, 3 };
List myList = Arrays.asList(myArray);
System.out.println(myList.size());
}
}
此时输出为1。因为asList方法的参数必须是对象或者对象数组,而原生数据类型不是对象。把int改成Integer则可。或者使用JAVA8新引入的API:
public class Test {
public static void main(String[] args) {
int[] intArray = {
5, 10, 21 };
//Java 8 新引入的 Stream 操作
List myList = Arrays.stream(intArray).boxed().collect(Collectors.toList());
}
}
2.2:试图修改 List 的大小
public class Test {
public static void main(String[] args) {
String[] myArray = {
"Apple", "Banana", "Orange" };
List<String> myList = Arrays.asList(myArray);
myList.add("Guava");
}
}
运行后抛出:java.lang.UnsupportedOperationException异常。因为aList方法返回一个由指定数组生成的固定大小的 List。解决方法:创建一个真正的arraylist:
public class Test {
public static void main(String[] args) {
String[] myArray = {
"Apple", "Banana", "Orange" };
List<String> myList = new ArrayList<String>(Arrays.asList(myArray));
myList.add("Guava");
}
}
public List<List<Integer>> threeSum(int[] nums) {
int len = nums.length;
List<List<Integer>> result = new ArrayList<>();
Arrays.sort(nums);
if(len==0 || len==1) {
return result;}
for(int i=0; i<len-2; i++) {
if(i==0 || (i>0 && nums[i]!=nums[i-1])){
int low=i+1;
int high=len-1;
int target = 0 - nums[i];
while(low<high)