摘要: 利用最小堆思想。首先把1压入堆,然后取出堆顶元素,分别乘以2,3,5后把新增的数压入堆。然后再取堆顶元素操作。取第1000个丑数就是取第1000个不同的堆顶元素。 其实如果用set容器来做的话效率可能会提升,因为set不会把重复元素放进自身。set找最小的元素需要O(logN)的时间,表面上比堆的O 阅读全文
posted @ 2016-03-29 23:02 vaevaevae 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 这道题目首先不管random指针,按照next指针把链表元素给复制出来。然后处理random指针,比较容易想到的想法是利用哈希思想(或者等价的map,set等stl容器),但这样的话需要辅助空间。 不需要辅助空间的方法,复制元素的时候把原始链表改成这样就可以了: 然后修改新增元素的random指针, 阅读全文
posted @ 2016-03-29 22:52 vaevaevae 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 需要O(1)时间求出最小值。如果换成最大值,那就和“滑动窗口的最大值”一题思路差不多了。 用一个栈保存元素,用另一个栈来存储最小值,如果新增的元素比栈顶元素小则压入,否则不压入。 如果检测到第一个栈把最小元素弹出了,那么另一个栈也弹出栈顶元素。 “滑动窗口的最大值”更加复杂一点,而且是用deque保 阅读全文
posted @ 2016-03-29 22:35 vaevaevae 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 调整后奇数相对位置不变,偶数相对位置不变。可以先找到第一个偶数所在位置和最后一个奇数所在位置,然后把偶数一次次向后移动,空出来的第一个位置用来填充最近的一个奇数,直到把最后一个奇数填充到空出来的位置为止。 1 class Solution { 2 public: 3 void reOrderArra 阅读全文
posted @ 2016-03-29 22:21 vaevaevae 阅读(160) 评论(0) 推荐(0) 编辑