重新刷一遍Leetcode,回忆Java基础知识
1)Java中的map有HashMap和TreeMap两种,HashMap通过内部哈希值的映射关系完成查找,而TreeMap的映射关系存在一定的顺序,假如希望容器里的元素是有序的,那么应该选用TreeMap,否则选用HashMap,因为HashMap的效率会更高。
2)Java排序
对数组排序,可以使用Arrays.sort(),排序的参数可以由 Collection指定
import java.util.Arrays;
import java.util.Comparator;
int[] intArray = new int[] {4, 1, 3, -23};
Arrays.sort(intArray);
String[] strArray = new String[] {"z", "a", "c"};
Arrays.sort(strArray);
Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
Arrays.sort(strArray, Collections.reverseOrder());
Collections.reverse(Arrays.asList(strArray));
通过实现Comparator接口对自定义对象排序
import java.util.Comparator;
public class TwoSum_1 {
private String name;
private int weight;
public TwoSum_1(String name, int weight) {
this.name = name;
this.weight = weight;
}
public int getWeight() {
return weight;
}
class sortByWeight implements Comparator {
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
int lhs = ((TwoSum_1)(o1)).getWeight();
int rhs = ((TwoSum_1)(o2)).getWeight();
if(lhs > rhs) {
return 1;
} else if(lhs < rhs){
return -1;
}
return 0;
}
}
}
3) HashMap的用法
a. 初始化 HashMap<Integer, Integer> mp = new HashMap<Integer, Integer>();
b. 添加元素 mp.put(1,2);
c. 查询元素 mp.get(1); // 1是key
d. 遍历
一个例子:
import java.util.*;
import java.util.Map.Entry;
public class TwoSum_1 {
public int[] twoSum(int[] numbers, int target) {
Map<Integer, Integer> record = new HashMap<Integer, Integer>();
for(int i = 0; i < numbers.length; i ++) {
record.put(numbers[i], i+1);
}
int index1 = 0, index2 = 0;
Iterator<Entry<Integer, Integer>> iter = record.entrySet().iterator();
Entry<Integer, Integer> entry;
int key;
while(iter.hasNext()) {
entry = iter.next();
key = entry.getKey();
if(record.containsKey(target-key)) {
index1 = entry.getValue();
index2 = record.get(target-key);
break;
}
}
if(index1 > index2) {
int temp = index1;
index1 = index2;
index2 = temp;
}
int[] res = new int[2];
res[0] = index1;
res[1] = index2;
return res;
}
public void test() {
int[] numbers = new int[4];
numbers[0] = 2;
numbers[1] = 7;
numbers[2] = 11;
numbers[3] = 15;
int target = 9;
int[] res = new int[2];
res = twoSum(numbers, target);
System.out.println(res[0]);
System.out.println(res[1]);
}
public static void main(String args[]) {
TwoSum_1 ts = new TwoSum_1();
ts.test();
}
}
另外,Java没有现成的 swap()函数,需要自己写。