1. 实现一个Hashmap,考虑多线程环境;
2.given the list {{1,1},2,{1,1}},返回10……因为,(four 1's at depth 2, one 2
at depth 1). 给定 {1,{4,{6}}} ,返回27……因为, (one 1 at depth 1, one 4
at depth 2, and one 6 at depth 3)
思路:一个变量表示深度,遇到{累加,}减一,遇到数则乘以当前深度,然后累加到和;
3. 给2个string,判断是否可以map. say
(foo, abb) 这2个string是可以map的, f->a
, o->b. say (foo, sdf),是不可以map的……返回bool值
思路:首先检查两个字符串的长度是否相同,然后用一个map<char,char>记录,扫描第一个字串如S的字符,如当前字符在map中有,则检查第二个字串对应位置的字符与map中的字符是否相同;如果map中没有,则存入;
4.
给一个string,每10个letter一组,输出所有出现次数超过一次的strings with
length of 10. 一定要用rolling hashing做
5.
给一个数组,输出连续元素的最大和。
思路:简单的动态规划,consectiveSum=max(consectiveSum+curNum,curNum);ans=max(ans,consectiveSum)
6. 判断2个linkedlist是否在某一点会重合.
O(1) space.
思路:首先检查两个链表长度s和t,S>t,然后长的个走(s-t)长度,开始两个指针同时扫描,判断是否有相等的时候(指向地址相等);
7.
leetcode: Max Points on a Line
思路:还没在Leetcode上做过,枚举每两个点形成的斜率存入一个map<斜率,点数>即可,O(n2)扫描所有可能的直线,把两个点放入map对应的点数,最后每个斜率对应的点数除以2就是该斜率划过的点数;
8.给一个数组,输出连续元素的最大乘积。
思路:也是很常见的题,简单动态规划,但是要保留两个变量:positive=max(positive*a[i],negtive*a[i],a[i]),negtive=min(negtive*a[i],positive*a[i],a[i]),ans=max(ans,positive)
9.给一个数组,a(10,
2, 5)……输出一个数组, b(10, 50, 20)……b[i]是除了a[i]以外剩下a中所有元素的乘积……不准用除法.
思路:也是很常见,简单方法是一个front[i] =front[i-1]*a[i-1], back[i]=back[i+1]*a[i+1],最后ans[i]=front[i]*back[i]即可,更优化就是只开一个数组,顺着做front,扫描完再倒着做back[i],即得。
10.设计一个web calender,要考虑UI,后端,数据格式等;