一些注意事项

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.csdn.net/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值