free website counter

Mushsen's Blog


链表表示的大数加法

   来自企鹅的题目,大数加法,两个单向链表,未知长度,不能将链表翻转、不能使用数组,不能修改链表,需要O(n)的时间复杂度。

  大数加法的变种,一般都以数组/链表的形式出现。主要是进位的处理。对这一题来说,比较麻烦的就是,数据的高位在链表头位置,而链表只能通过头指针进行遍历。不能使用一个stack,先遍历链表,将各个节点入栈,然后依次出栈并相加。不能使用数组,即限制了这种方法的使用。

Read More

Mac风扇狂转

  这两天温度上来,所里真是苦不堪言,本来就很闷的环境,没有空调,跟蒸笼一样。从苏州回来后,这两天Mac air的风扇狂转,还怀疑是在炎热的环境中罢工了,想想真不至于。昨晚在15楼,搞到晚上10点,就受制于风扇的嗡嗡声音,草草回宿舍,晚上在宿舍开着电脑更新软件,却并未见异响,诡异。

Read More

Subsets I/II

   给定一个vector容器存放的整形数组,返回所有的子集,要求子集中的元素为非递减排列;其中I中的元素没有重复,II中可能存在重复元素。

  开始看到题目,第一感觉就是dfs,但是似乎这一题,又不算标准的dfs。当数组中没有重复元素时,对于长度为n的数组,子集有2^n个,即对于每个元素,都可以选择加入或者不加入。则可以先将数组排序,再依次将每个元素加入已生成的子集中。

Read More

Find Peak Element

  按照题意,peak number即在一个数组中,比前后元素都大的数字。对于nums[-1], nums[n],都认为值为无穷小。题目要求的时间复杂度为O(logn),毫无疑问需要使用二分查找,解题有一个小trick,即对mid元素做判断是否为peak number,若否,往那边跳的问题。

Read More

Search in Rotated Sorted Array I/II

  给定一个有序数组,以某一个支点做旋转;给定一个target,找出该数组中是否存在该target.其中I数组没有重复元素,若存在,则返回元素索引,反之,返回-1。II数组中存在重复元素,存在返回True,否则返回False。

  这一题O(n)的写法,几行代码就写出来了,但是显然题目是要考察二分查找,O(n)的解法没什么意义。二分查找,时间复杂度为O(logn),其中第二题中,存在重复元素的情况下,主要可能存在A[lo] == A[mid]同时A[mid] == A[hi]的情况,这点是需要特别注意的地方,可以通过逐步收缩right/left的位置将这个影响因素排除。

Read More
Load More…
分享按钮