leetcode算法思路总结(持续更新..)

1.两数之和leetcode算法思路总结(持续更新..)_第1张图片
2.求两数之和
tip1:需要一个预先结点最后返回结果为预先节点的下一个结点
tip2:进位 int carry=0;//先将进位置为0
int sum=x+y+carry;
carry=sum/10;//下一次的进位
tip3:当前位的值

3无重复字符的最长字串 —滑动窗口
tip1:new hash’Map ;//用于存储 出现的字符串和位置 位置下标用于计算滑动窗口大小 map就表示这个滑动窗口 存储的是无重复的子串
tip2:当map中包含该值 时
left = Math.max(left,map.get(s.charAt(i))+1);//s.charAt(i)+1 表示把当前的重复元素,从最左侧移动出去

tip3: max=Math.max(max,i-left+1);//最大值为之前记录的值和现在map中的元素长度最大值

5最长回文子串
如果回文子串位奇数(第i位)则从i+1和i-1 分别向两边开始判断
如果回文子串为偶数 (第i位) 则从第i位和第i+1位开始向两边判断
当当前子串长度大于原来最大值长度时 更新最大值长度和对应子串的石墨坐标

6.z字型变换
利用ArrayList存储z的行数
利用flag=1或-1 进行行数的加或减 flag转换的时机是第一行和最后一行时 flag会进行转换
StringBuffer可以append 尾部追加字符串 利用特性

7.整数反转
tip1:先取余数 不断给余数10 令其进位
tip2:不断对原数/10 抹掉最后一位 循环结束的条件就是x==0
tip3:对负数取余数还是负数 所以不断
10 不断相加的过程中 数字并不会出错 java取余数的机制是先数字的绝对值取余 最后加上负号
tip4:注意判断反转后是否越界 最大值的最后一位为7 最小值的最后一位为8

8.字符串转换为整数
tip1:尽量不是哟个trim() 因为java中string设计是不可变的 这样做会产生新的内存变量
tip2:index是全局变量表示这现在再遍历字符的哪一个位置
tip3:充分考虑每一种情况 第一个正负号为了不影响后面的加减法 在每一次乘当前数值-’0’时都要乘上正负号
tip4:遇到字母 无论是在第一个还是在中间 都会停止后面的计算 所以将返回的结果先置为0 判断是否为字母在循环中判断
tip5:整个算法都要遍历字符串 时间复杂度为O(N) 无法优化 尽量减少空间复杂度 充分考虑每一种情况即可

你可能感兴趣的:(leetcode算法思路总结(持续更新..))