这是一道简单题目,直接两重循环判断实际复杂度O(n^2), 使用HashMap优化,时间复杂度O(n)
这一道题目稍微有一点难度,直接穷举所有字串判断是否重复,时间复杂度是O(n^3), 可以根据字串的连续性,将时间复杂度优化到O(n^2), 使用双指针滑窗的算法,可以将时间复杂度优化到O(N)
这也是一道难度的题目,直接穷举所有字串,判断是不是回文,时间复杂度O(n^3)。
利用动态规化,令bool dp[i][j]表示i到j的字串是否回文串
状态方程为 dp[i-1][j+1] = true if (dp[i][j] = true and s[i-1]=s[j+1]), 时间复杂度是O(n^2)
枚举回文中心,向两边扩展,时间复杂度是O(n^2)
存在一种神级的Manacher算法时间复杂为O(N)
利用除法取余数的算法,注意整形溢出的情况,容易题
实现c语言中的atoi函数,需要先处理字符串前面的空格,以及判断正负号,当读到非数字字符的时候结束。字符串转整形用的是乘法,同时还要注意处理溢出问题。
判断一个数是否是回文数,利用整数反转的方法,但要注意防止溢出,可以完全反转用long long存储,也可以只反转一半。
罗马数字特殊的地方只有下面六种情况
I
可以放在V
(5) 和X
(10) 的左边,来表示 4 和 9。X
可以放在L
(50) 和C
(100) 的左边,来表示 40 和 90。C
可以放在D
(500) 和M
(1000) 的左边,来表示 400 和 900。
所以罗马数字转整数只需要遍历一次字符串,注意六种特殊情况,其他依次转换即可
整数转罗马数字只需要把这六种情况当作一个新的数,用贪心算法处理即可。
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
这是一个经典的快慢双指针算法
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
和上面一样,也是经典的快慢指针算法。