0.解题思路
a. 普通思路
b. 递归(BFS/DFS)
c. 动态规划(比递归快)
d. 双指针(比for循环快)(如:快慢指针方法)
e. 用栈
1.数组初始化
int[] a=new int[5];
a[0]默认为0.二维数组也一样。
boolean[] b=new boolean[5];
b[0]默认为false.
String[] c=new String[5];
c[0]默认为null
2.map如果重复会覆盖
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
map.put(1,200);
System.out.println(map.size());
map.put(1,300);
System.out.println(map.size());
System.out.println(map.get(1));
输出
1
1
300
3.循环
for(int i=0;i<0;i++){
System.out.println("ddd");
}
不会输出。
4.排序
Arrays.sort(数组)
Collections.sort(List)
5.
list.contains(xxx);
注意:时间复杂度O(n)。
map.containsKey(xxx)
时间复杂度小于O(n)。
尽量使用map.containsKey(xxx)。
6.字符串
str=str.trim(); //去掉首尾空格
str=str.replace(" ",""); //去掉所有空格
if( str.charAt(0)=='a' ){} //取字符串某位字符,char比较使用==
"abcd".substring(1,3) 结果为 "bc"
字符串比较 str1.compareTo(str2)
https://blog.youkuaiyun.com/justdoitfl/article/details/79421414
int a=Integer.parseInt(str); //字符串转整数
String a="A man, a plan, a canal: Panama";
a=a.toLowerCase(); //转小写
a=a.toUpperCase(); //转大写
String[] ss=s.split("xxx"); //分割成字符串数组
特殊情况
String s="1.2.3";
String[] ss=s.split("."); //不行,因为"."为正则表达式,需要转义"\.","\"也需要转义"\\."
String[] ss=s.split("\\.");
7. Stack
Stack<String> stack=new Stack<String>();
if( stack.empty() ) { }
String s=stack.pop()
stack.push(s)
stack.peek() // 查看堆栈顶部的对象,但不从堆栈中移除
8.String 转 char[]
char[] c=str.toCharArray();
String s=String.valueOf(c);
9.Map
map.containsKey(xxx); //复杂度O(n)
map.containsValue(xxx); //复杂度O(n²)
遍历
for(Map.Entry entry : map.entrySet()) {
entry.getKey();
entry.getValue();
}
10.队列
Queue<Integer> queue=new LinkedList<Integer>();
queue.offer("a"); // 添加到队尾
str=queue.poll(); // 移出队头
11.char 转int
char c = '3';
int n = c - '0';
在使用 'A'+1 时最好在前面加上强制类型转换(char)
public static void main(String[] args) {
int i='A'+1;
System.out.println(i);
char c='A'+1;
System.out.println(c);
System.out.println("-------");
String a='A'+1 +"";
System.out.println(a);
String aa=c +"";
System.out.println(aa);
System.out.println("------");
String aaa=(char)('A'+1) +"";
System.out.println(aaa);
// 所以在使用 'A'+1 时最好在前面加上强制类型转换(char)
}
输出
66
B
-------
66
B
------
B
12. 位运算
与(&)
或(|)
非(~)
异或(^)
左移(<<) :num << 1,相当于num乘以2
右移(>>) :num >> 1,相当于num除以2
13.long类型
int类型范围[-2的31次方,2的31次方-1]
如果int超范围,使用long类型。一定要先转换为long类型再加 ‘-’,如下图。
int最大值的平方也不会超过long类型范围。
long a=10000000;
long b=10000000;
System.out.println(a*b);
int c=10000000;
int d=10000000;
System.out.println(c*d);
输出
100000000000000
276447232
小心int乘法超范围,必须手动转换为long类型,无法自动装箱。
14.精度问题
判断a/b==c/d时,注意精度问题。正确的做法是,分子分母求最大公约数然后进行约分变为最简分数再比较,不能用简单的除法计算。
15. List翻转
Collections.reverse(list);
16.运算优先级
== 优先级大于 &
if((n&1)==1){
res++;
}
需要加上 ()再== 1