- 按从低到高的难度分组刷
- 按 tag 分类刷
先把这五个tag做了:array,string,tree,linkedlist,math,其它的千万别按tag刷。
第一遍:可以先思考,之后看参考答案刷,结合其他人的题解刷。思考、总结并掌握本题的类型,思考方式,最优题解。
第二遍:先思考,回忆最优解法,并与之前自己写过的解答作比对,总结问题和方法。
第三遍:提升刷题速度,拿出一个题,就能够知道其考察重点,解题方法,在短时间内写出解答。
定期复习,重做之前刷过的题
- 按照题目类型进行总结:针对一类问题,总结有哪些解题方法,哪种方法是最优的,为什么。
- 总结重点:有些题你刷了好多遍都还是不会,那就要重点关注,多思考解决方法,不断练习强
https://www.zhihu.com/question/36738189
结合图解刷题
动画
https://github.com/MisterBooo/LeetCodeAnimation
10-14 oneday 按照出现频率 String
审题
- 输入,输出是什么,输出详细看
- 题目类型
- js 语言熟悉更种函数,java
暴力破解法
一般就是通过循环这种一次去找,就比如是简化给的数据,然后自己动手找出规律,算法这种。
- 1588 :审题不清晰,认真去看每道题,可以从简单数据开始,推导规律,自己是怎么解决这个问题的(思路写成程序)
优化
简化问题,首先考虑简单情况
- 数组
- 数组只有一个元素,数组为空
- 根本就不是数组
- 数组的元素规律性,根据所给数组的形式以及要求的数组形式判断。一般给出的是数组,返回的也是数组。
- 二维数组矩阵,矩阵为方阵
- 数组是递增排列的,数组全为正数,负数等等
- 能少定义变量就少定义( int len = A.length;),排序可以直接用数组的
Arrays.sort(reArray)
- 不知道长度的数组初始化很麻烦
java 语法
java 定义数组
1 | int[] arr = new int [长度] |
奇偶数判断 &
& 是按位与运算符 n&1 , 先把n 和 1分别转换为二进制, 然后对比他们二进制每个位上的数, 当双方位置上的数都为1时 ,结果为1 ;其它情况都为0。
(n&1 != 0 )
的时候,n为奇数,否则为偶数。
Java中的按位与(&)、按位或(|)、异或(^)等运算符
按位与运算符(&):
参加运算的两个数据,按二进制位进行“与”运算。运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;负数按补码形式参加按位与运算.
即:两位同时为“1”,结果才为“1”,否则为0
按位或运算符(|)
参加运算的两个对象,按二进制位进行“或”运算。
运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;
即 :参加运算的两个对象只要有一个为1,其值为1。
异或运算符(^)
参加运算的两个数据,按二进制位进行“异或”运算。
运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;
即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0
取反运算符(~)
参加运算的一个数据,按二进制位进行“取反”运算。
运算规则:~1=0; ~0=1;
即:对一个二进制数按位取反,即将0变1,1变0。
负数的二进制表示
在计算机中,负数以其正值的补码形式表达。
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
补码:反码加1称为补码。
0原码是00000000; -0原码是10000000
for 循环语句执行顺序
for 语句头包括:初始化(1),判读条件(2),一个表达式(3)。
首先初始化(1),判断条件是否成立(2),成立进入循环体,然后执行表达式(3),然后再判断(2),进入循环体,执行(3),判断(2)
java map
HashMap 介绍
HashMap 储存数据的方式是—— 键值对 ,键不能重复,值可以重复(值是最新值)。所有的基本类型,都有对应的类类型,比如int对应的类是Integer,这种类就叫做封装类
1 | # HashMap 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类(Integer)。 |
Java中如何遍历Map对象的方法
方法一 在for-each循环中使用entries来遍历
在键值都需要时使用。
entrySet()
返回 Map中所包含映射的 Set视图。 Set 中的每个元素都是一个 Map.Entry对象,可以使用 getKey()和 getValue()方法(还有一个 setValue()方法)访问后者的键元素和值元素
keySet()
返回 Map中所包含键的 Set 视图。删除 Set中的元素还将删除 Map中相应的映射(键和值)
values()
返回 map中所包含值的 Collection视图。删除 Collection中的元素还将删除 Map中相应的映射(键和值)
1 | Map<Integer, Integer> map = new HashMap<Integer, Integer>(); |
方法二 在for-each循环中遍历keys或values
1 | Map<Integer, Integer> map = new HashMap<Integer, Integer>(); |
JAVA中Arrays.sort()使用两种方式(Comparable和Comparator接口)
Comparable接口
让待排序对象所在的类实现Comparable接口,并重写Comparable接口中的compareTo()方法,缺点是只能按照一种规则排序。
Comparator接口
编写多个排序方式类实现Comparator接口,并重写新Comparator接口中的compare()方法。数组中的所有元素都必须是通过指定比较器可相互比较的(也就是说,对于数组中的任何 e1 和 e2 元素而言,c.compare(e1, e2) 不得抛出 ClassCastException)。优点是可以按照多种方式排序,你要按照什么方式排序,就创建一个实现Comparator接口的排序方式类,然后将该排序类的对象传入到Arrays.sort(待排序对象,该排序方式类的对象)
1 | //重写该接口的compare()使其按照学号由小到大排序(前者减去后者) |
二维数组的 Array 排序
1 | int[] arr = new int[] {1,4,2,5,3}; |
java 里面不能 if(n % 2 ) 会报错,n % 2
结果是一个整型而不是 boolean。
所有变量定义之后都需要初始化。