初级
掌握算法及数据结构,并提高您的编程能力和一些解题小技巧,一些数据结构题型解题方法。
数组
对数组的去重、旋转移动、是否重复、找出现一的个数、数组的交集、移动零到最后、给定值在数组中找两数的和、有效数独、二维数组90°旋转等等…所学习到的技巧:
- 双指针 ,快慢指针 对撞指针 滑动窗口
快慢指针:可以找到链表的中间值,可以使用在删除时的移动; - 动态规划,全局最优解,背包问题,买卖问题;
- 贪心算法,局部最优解,只选择上升部分,然后累加起来;
- 哈希表(HashMap<kay,value>),在遇到需要统计值的个数时,或有加减计算时;例如:是否重复、只出现一次、数组中数的和为给定值等等;方法add() remove() size() getOrDefault()…
- 位运算,偶数相同时为0 ,奇数相同时为1;
- 直接解决,暴力破解;
- 还有一些是对应该题找规律,来更好的解决;
- 如果不影响解题过程,可以先排序,再来进一步的解决问题,可能回方便一些。
复习回顾了HashMap的一些方法
字符串
对字符串的 反转、字符串的数字反转、找出字符串唯一字符、有效异位词、验证回文字符串(带其他符合如:空格,。)、字符串(含有数字的部分 有符合)转整数、找一个字符串在另一个字符串出现的第一个位置、外观数列、最长公共前缀等等…
- 双指针 ,快慢指针 对撞指针 滑动窗口
快慢指针:可以找到链表的中间值,可以使用在删除时的移动; - 递归,全局最优解,背包问题,买卖问题;
- 数学,例如如何拆分数字,在比较两个字符串的字符个数是否相同时,可以先加一个,在减去;
- KMP,对于暴力破解,更好的字符串匹配算法, 我认为 KMP 算法就是个动态规划问题。KMP 算法知道字符 b 之前的字符 a 都是匹配的,减少多余的检查,提高性能。
KMP 算法的难点在于,如何计算 dp 数组中的信息?进而应用该数组来移动位置。
创建一个对应的表 - 哈希表(HashMap<kay,value>),在遇到需要统计值的个数时,或有加减计算时;例如:是否重复、只出现一次、数组中数的和为给定值等等;
- 一些String类已有的API,charAt() indexOf lastIndexOf
链表
特点:遍历不方便,只能从头一个接一个的找。
链表的查找删除、反转、合并
- 借助辅助指针,
- 递归,合并时 一直是在做 比较添加较小的数,递归从未开始添加
- 栈Stack,用于解决是否回文
- 找规律,反转等等方法
继续做题中,后续继续总结…