【LeetCode 手撕算法】(细节知识点总结)
一、Array类List类
1、排序Arrays.sort(nums); Array要加s
2、ArrayList<Integer> maxlist = new ArrayList<>(); ArrayList里面两个大写
3、数组固定不变用 .length,ArrayList可变用 .size()
4、ArrayList 访问下标用 .get(i) ,数组才可以直接arr[i]
5、Math.min() 和 Math.max() 可以直接求两数值int、long、float或double的较大较小值
6、添加: 将元素以List形式存进res列表,res.add()
7、Arrays.equals(hashS,hashP) 比较两hash串是否相等,用于判断是否为异位词
比较地址内容用 a.equals(b) 比较数组内容用Arrays.equals(a,b)
8、Arrays.fill(ans,1); 将ans全部设置为1,Arrays不忘s
二、返回值类
1、return new int [ ] { l,r} 为新建一个int数列,值为l,r 结果为 [ l ,r ]
2、return new int [ 0 ] 指返回长度为0的int数列。不能直接返回 null,否则会出现 NullPointerException错误
三、定义类
1、int i=0,j=0; 需要分开定义,不能是int i,j=0;
2、开头为void,则不需要返回值;
3、如果定义为 int [ ] nums,则直接返回 return nums;
4、List<List<Integer>> res = new ArrayList<>()
存多组结果的二维表 例:[[1,2], [3,4,5]]
5、Set<Character> win=new HashSet<>() 定义集合类
6、int minprice=Integer.MAX_VALUE;//默认最大值,正无穷
四、string类char类
1、char[]ch= s.toCharArray(); //把string变成char
2、win.contains(xxx) 判断win里是否包含xxx,拼写别忘了s
3、String类型用.length()算长度,数组用.length,集合用 .size()
4、获取元素用charAt( ) , 截取用substring( i, j )
五、数组类
1、注意二维数组排序写法格式 intervals,(arr1,arr2)->arr1[0]-arr2[0]
2、 ans.add ( new int [ ] { left,right } 意思:新建含left,right的数组,动态存入ans
六、链表类
1、比较两节点是否相等,用per.val 和slow.val
2、新建ListNode类集合Set <ListNode> visited=new HashSet<ListNode>()
3、set . add(xxx)为true即集合未出现过(添加的同时返回true),为false即出现过。
4、遍历类的要用其他节点来接头节点,头节点保持不动 方便之后再使用
5、二维链表操作.get() .add() 、.get() .get()
七、队列类(BFS广度优先使用、是否有环)
1、Queue<int[]> queue = new LinkedList<>();
2、get.(x).add(y)根据x层存y数据
3、queue.offer(1) 入队--加入队尾
4、queue.poll() 出队--去掉队头
5、queue.peek() 看队头
6、queue.size() 队列元素个数
7、queue.isEmpty() 判断是否为空
八、操作汇总
数组用 .length 字符串用 .length() 集合用size.() ;
添加: List用add( ) , StringBuilder用append.( ) ;
删除: List用remove( ) , StringBuilder用deleteCharAt.( ) ;
要求O(log n)查找,用二分查找,左右指针求mid
九、栈
自动装箱:Integer有可能为null,可以存进栈里;取出来时如果用int来接,会报错int不能为null
