1、给一个数组a,一个空数组b,从前往后每次取a中一个数放进b的头部,然后逆转b。输出最后的b。
比如a是 1 2 3 4
b就依次是
1
1 2
2 1 3
3 1 2 4
最后输出
3 1 2 4。
模拟的话会超时,找规律一趟遍历ac。
规律:
先从后到前把索引为偶数的放进b,然后从前到后把索引为奇数的放进b。
如果是数组长度是奇数,就把b再翻转一次。
输出b。
2、一个数组,数组里元素表示高度(非负)。定义一个合并操作,就是连续的相同的高度会合并成一个。数组输入的时候先做一次合并,不计入结果。然后开始操作,每一轮执行这两步:
(1)数组中最低非零高度为k,每一个高度降低k。
(2)进行合并。
当数组长度为1并且这个值为0的时候结束。
输出降低高度的轮数,以及每一次合并后的数组长度。
比如1 3 9 9 7,输入成1 3 9 7
然后开始操作:
第1次:0 2 8 6
第2次:0 6 4
第3次:0 2 0
第4次:0
结束。输出:
4
4 3 3 1
用模拟的方法过了50%,想分析规律,觉得跟数组初始状态中的每一个数连续相同数字个数有关,考虑dp但是时间不够了。
全部评论
(3) 回帖