目前只刷了几道题,会持续更新,主要想记录一些自己的小总结,有些方法借鉴了lc题解里的方法
1、两数之和
主要是注意map的用法
2、多数元素
方法一:普通对每个数计数,然后取大于n/2的
**注意getOrDefault( )方法的使用
方法二:摩尔投票法,相同加一不同减一
3、整数反转
考虑溢出问题,由于int型的数值范围是 -2147483648~2147483647, 那么如果要翻转 1000000009 这个在范围内的数得到 9000000001,而翻转后的数就超过了范围。
214748364 即为 INT_MAX / 10
Math.abs( )和Integer.MAX_VALUE的使用
4、回文数
方法一:直接对整数进行操作,可以利用取整和取余来获得想要的数字,比如 1221 这个数字,如果 计算 1221 / 1000, 则可得首位1, 如果 1221 % 10, 则可得到末尾1,进行比较,然后把中间的 22 取出继续比较。
方法二:利用之前的整数反转
5、罗马数字转整数
方法一:自己写的,感觉很像暴力法,内存占用太高
方法二:map存储
**注意仔细看这个题,由于有特殊的相减情况,所以遇到一个罗马数字后,首先判断其与后一个罗马数字的大小,若当前大于等于后一个罗马数字,加上当前,若小于后一个数字加上 (后减去当前 )其实也就是减去当前,因为下一个罗马数字也要判断
6、最长公共前缀
没有特殊的方法,无脑查找:定义两个变量i和j,其中i是遍历搜索字符串中的字符,j是遍历字符串集中每个字符串
在遍历过程中,如果某一个字符串遍历完了,说明其为最短的单词
7、有效的括号
括号匹配问题首先想到的是 栈 这个数据结构
***这里需要注意Java与C不同,取栈顶值Java用的是stack.peek( )而不是.top( )
***以及最后对栈中元素是否为空的判断!!!!
8、合并两个有序链表
* 链表的题主要是逻辑不能乱,多画画图
* 方法一:不另行增加新的链表,在l1链表上改动
* 方法二:新建一个链表用来存储合并后的新链表
* 方法三:递归解法,执行时间短但内存消耗大于以上两种 学会用递归解法解题