Skip to content

Instantly share code, notes, and snippets.

View sing1ee's full-sized avatar
🏠
Working from home

zhangcheng sing1ee

🏠
Working from home
View GitHub Profile

###拷贝链表分析

####原题 有一个链表,每一个节点除了next指针指向一下节点以外,又多出了一个指针random,指向链表中的任何一个节点,包括null。请给出方法完成链表的深拷贝。

####分析 这个问题的关键就在于random指针如何完成拷贝,next指针一次遍历就完成了,random指针拷贝的关键在于,如何找到random指向的节点对应的新的节点。一般来讲,大家会想到用map来保存旧的节点到新的节点的映射,这样得到的方法的时间复杂度为O(n),空间复杂度为O(n)。下面是一个可行的方法:oldlist为原始链表,copylist为新的链表,oldnode为oldlist中的节点,copynode为copylist中的节点:

  1. 根据oldlist,创建copylist,只拷贝next指针
  2. 保存oldnode到oldnode.next的映射
@sing1ee
sing1ee / gist:3e644b666eb212ad20c6
Created October 4, 2013 16:36
leetcode candy

###糖果分析

####原题 N个孩子站成一排,每个人分给一个权重。按照如下的规则分配糖果:

  1. 每个孩子至少有一个糖果
  2. 所分配权重较高的孩子,会比他的邻居获得更多的糖果

问题是,最少需要多少个糖果?

###翻译数字串分析

####原题 翻译数字串,类似于电话号码翻译:给一个数字串,比如12259,映射到字母数组,比如,1 -> a, 2-> b,... , 12 -> l ,... 26-> z。那么,12259 -> lyi 或 abbei 或 lbei 或 abyi。输入一个数字串,判断是否能转换成字符串,如果能,则打印所以有可能的转换成的字符串。动手写写吧。

####分析 转自@lxhgww 的一条微博“special thanks to @陈利人,找工作准备过程中,翻完你的3600多条微博,而且看完了所有的评论,收到了Microsoft和Google总部的offer,最终签约Google Mountain View”

首先要恭喜这位同学,我们能够帮助到这位同学,是我们莫大的荣幸,也是对我们待字闺中的最大的鼓励。我们会再接再厉,和同学们分享更多的题目。也希望同学们能够积极的参与进来,踊跃的讨论,各种思路进行碰撞,我们相信,不仅仅会对找工作有很大的帮助,对日常的工作也会有很大的促进的。

###回文分割分析

####原题 对一个字符串按照回文进行分割,例如aba|b|bbabb|a|b|aba就是字符串ababbbabbababa的一个回文分割,每一个字串都是一个回文。请找到可以分割的最少的字串数。例如:

  1. ababbbabbababa最少4个字符串,分割三次:a|babbbab|b|ababa
  2. 如果字符串整体是回文,则需要0次分割,最少1个字符串

####分析 这个题目很多做过leetcode的同学都见过,所以很多同学直接回复了DP。不过还是建议大家动手写一写。熟能生巧的。那么该如何分析这个题目呢?

###括号匹配

####原题

给定字符串,输出括号是否匹配,例如,

  1. "()" yes;
  2. ")(" no;
  3. "(abcd(e)" no;
  4. "(a)(b)" yes。

###缺失的数字分析

####原题 给定一个无序的整数数组,怎么找到第一个大于0,并且不在此数组的整数。比如[1,2,0] 返回 3, [3,4,-1,1] 返回 2。最好能O(1)空间和O(n)时间。 ####分析 首先数组是无序的,找到第一个大于0且不在数组中的元素,就是要找到大于0且不在数组中的最小的整数。要怎么处理呢?要找到最小的,不妨尝试从小到大排序,然后从1开始,查找是否在数组中,可以利用二分查找。这样整体的时间复杂度是O(nlogn),空间复杂度是O(1)。

离题目的要求,还差一些。如何改进呢?针对排序好的数组,我们做如下的观察:

  • 当缺失的数字为1的时候,A[0]<=0, A[1] != 1

###面试秘籍:怎么面试,怎么评分,怎么决定

今天去参加了公司的interview workshop,讲怎么面试,怎么评分,怎么决定。主讲做过hiring committee,应该是比较资深的,供大家参考。

打分系统,公司推荐用的标准:

  • 1.0:不要hire,hire这个人我就辞职
  • 2.0:可以hire,也可以不hire
  • 3.0:建议hire
  • 4.0:一定要这个人,他没来我就辞职
@sing1ee
sing1ee / gist:6137554
Created August 2, 2013 04:43
有11瓶酒,只有一瓶有毒。喝酒之后,三天会死,只有三天时间。请问至少需要多少只老鼠,可以找出9瓶没有毒的酒。

###老鼠毒药分析

####原题 有11瓶酒,只有一瓶有毒。喝酒之后,三天会死,只有三天时间。请问至少需要多少只老鼠,可以找出9瓶没有毒的酒。

####分析 题目描述很简单,可我们仍要抓住要点:

  • 11瓶,1瓶有毒
  • 喝酒之后,三天会死;只有三天时间->即使某一个老鼠没有被毒死,也不会有时间重复利用了
@sing1ee
sing1ee / gist:6120036
Created July 31, 2013 07:28
第n杯水

###第n杯水分析###

####原题 有一座金字塔,从上到下,第一层有一个杯子、第二层有两个杯子,依次类推。对杯子进行编号,有如下的形状:

1
23
456
每个杯子的容量为C升,从塔顶倒下L升水,当1号杯子满了之后,会等量溢出到2号和3号杯子。当2号和3号满了,2号溢出到4号和5号,3号溢出到5号和6号,注意5号接受来自两个杯子的水。依次类推。给定C和L,请问,第n杯里有多少水。
@sing1ee
sing1ee / gist:6120028
Last active December 13, 2021 02:27
在一个位图中找面积最大的白色矩形:给你一个NxN的黑白位图,找一个面积最大的全白色的矩形。注意了,是一个矩形,不是任意一个白色相连的区域。你的算法能够达到的最好的时间复杂度是多少呢?

###最大矩形

####原题 在一个位图中找面积最大的白色矩形:给你一个NxN的黑白位图,找一个面积最大的全白色的矩形。注意了,是一个矩形,不是任意一个白色相连的区域。你的算法能够达到的最好的时间复杂度是多少呢?

####分析 为了方便进行分析,我们假设黑色位置都是0,白色的位置都是1.题目的问题就转化为,找到一个最大的矩形,其中所有的元素都是1.

遇到这样的题目,该如何分析呢?这是一个矩形,是二维,是否是由一维的某些问题扩展而来的呢?一维的问题的解法,是否可以扩展到二维呢?我们看下面的题目: