算法
链表的操作
两个合并的正序数组,循环一个变量,起始点至两数组长度之和,比较并插入较小的数,最后取得中位数。
在头尾字符相等的情况下,里面子串的回文性质据定了整个子串的回文性质 dp[i][j] = (s[i] == s[j]) and dp[i + 1][j - 1]
中心扩散 枚举可能出现的回文子串的“中心位置”,从“中心位置”尝试尽可能扩散出去,得到一个回文串。时间复杂度:O(N^{2})
//pop operation:
pop = x % 10;
x /= 10;
//push operation:
temp = rev * 10 + pop;
rev = temp;
/^[+|-]?\d+/ //正则匹配数字
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
标准库里如何判断负数 Math.sign() 1, -1, 0, -0, NaN. 代表的各是正数, 负数, 正零, 负零, NaN
反转一半数字 然后对照是否相等 或者 奇数位尾数删除再判断是否相等
let revertedNumber: number = 0;
while (x > revertedNumber) {
revertedNumber = revertedNumber * 10 + x % 10;
x = Math.floor(x / 10);
}
取 两个板最小高度*两者之间的距离 记录最大容量
纵向扫描
首先排序,循环第一个数,定义双指针,大于答案,移动右指针,小于答案,移动左指针。
储存绝对差值,对比。
形成一个栈,入栈{[(,遇到}\)出栈并对比,栈空则正确。
迭代,链表的指针操作。
上题包装成函数,n-1 次调用。
遍历,重写当前数组,返回重复次数。
let i = 0;
for (let index = 0; index < nums.length; index++) {
if (nums[i] != nums[index]) {
i++;
nums[i] = nums[index];
}
}
return i+1;
当左指针小于等于右指针, 取得数组的中位数, 判断 0 到 mid 是否有序, 有序 target 在有序区间内, 让右指针左移. 否则左指针右移. 无序 使用右有序区间,target 在有序区间内, 让左指针右移动, 否则右指针左移动. 最终 中位数与目标值一致, 返回中位. 时间复杂度: O(log n)
模拟乘法算数
深度优先 track = function (numArray, crt)
始终由前两个状态得到.
位运算 a ^= i
isPowerOfTwo 位操作 n > 0 && (n & (n-1)) == 0