1.判断数字是不是回文串(不能申请额外,也不能转为字符串)
例如:
121 :return True
1213: return False
方法;将整数分成左右两部分,右边那部分需要转置,然后判断这两部分是否相等。
2.统计二进制字符串中连续 1 和连续 0 数量相同的子字符串个数
Input: “00110011”
Output: 6
There are 6 substrings that : “0011”, “01”, “1100”, “10”, “0011”, and “01”
方法:
1.分组地数0或者1,比如说对于"0110001111",结果就是[1, 2, 3, 4]。
2.结果就是 1+2+3 = 6
3.判断是否是合法括号对
如 []:ture
[}:false
字典key和value分别存括号对,利用栈,若左括号就加入栈,右括号如果和栈顶是成对的,则两者抵消,如果栈空了,待加入的还是右括号,则false,如果最终栈都抵消掉了,true
4.链表排序 不申请额外空间
用归并排序,
5.二叉树的右视图(左视图类似)
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
思路:
先把二叉树的层序遍历搞定,然后把每一层最后一个加入到result里即可。
6.只能卖一次,买卖股票最大利润
不停找最小值,与此同时不停的找(当前价格-最小值)的最大
7.不限制买卖次数,最大利润
遇到增的 就加上差值,不停的买卖
8.只能买卖两次,求最大利润
在[1, 2, … n-1, n] 中可把两次交易分为[1, 2, … i] 和 [i, … n-1, n],这个分解过程是只能买卖一次中的思想,
接着分别计算[1, 2, … i] 和 [i, … n-1, n] 中的最大利润 f[i] 和 g[i],计算方法在121中得以体现
我们最后就是取出 max(f[i], g[i]) 就可以了。