本周做的极为不好只做出了第一个题,但本周的题目并不难。原因应该是起的晚,再加上在宿舍床上没能静下心来做。
1. K 次取反后最大化的数组和
思路:1. 尽可能把负的取反,从最小的开始取反; 2. 已经都为正数且次数有剩余:若剩余次数为偶数,则不做处理;否则将最小的取反。
上午做的时候处理太复杂了,想的是插入一个0,然后排序获取 0 的下标 i
,得出 i
左边的都是小于零的,右边都是大于零的,再按思路提到的那样做。但这样有点麻烦,且没有必要,直接排序然后处理就好了。
2. 笨阶乘
大体的想法是利用栈来做,但看了别人的方法,用了 itertools.cycle()
和 eval()
函数很简单就做出来了。
不这么做也很简单,顺序为乘除加减,对于乘除加法操作,直接运算即可,只有减法比较即可。
3. 行相等的最少多米诺旋转
这个题统计就好了:1. 如果两个数不同位置的某个数字的个数大于等于数组长度,则有答案,否则返回-1;2. 遍历1到6,统计次数,对于相同位置数字相等的情况,在出现次数少的数组中减少一次;3. 遍历1到6,对于出现次数大于等于数组长度的情况,用数组长度分别减去在两数组中出现的次数,返回较小值即可。
4.先序遍历构造二叉树
对于搜索二叉树,给了先序遍历,而一排序就可以得到中序遍历。遍历构造即可。