m***y 发帖数: 1 | 1 同意楼上peking2。从前往后,去A,从后往前,double B。
C代码如下:
#include
#define MAX_S_LENGTH 1024
void remove_a_double_b(char *s) {
int i, j, n, na, nb, nc; // nc is number of characters other than A
na = nb = 0;
j = 0;
for (i = 0; s[i] != '\0'; i++) {
if (s[i] == 'A')
na++;
else {
s[j] = s[i];
j++;
if (s[i] == 'B')
nb++;
}
}
n = i;
nc = j;
i = n - na + nb;
s[i] = '\0';
i--;
f... 阅读全帖 |
|
j********e 发帖数: 1192 | 2 整个string就是一个大数,也不需要遍历一遍。
例如从中点开始,不是空格,往前走N个,往后走N个,就知道当前数肯定
比目标数大了,然后就跳去1/4位置。
你再想想?
最坏,大string就一个数,你当然要遍历一遍拉,你再想想 |
|
t**********h 发帖数: 2273 | 3 我觉得他的意思是说前半截a1到an排好序了,后半截b1到bn排好序了,这样来扔。看原
题的描述,似乎是从b1这个数字的下标开始,每个bi依次往ai插
如果是这样的,和我们之前讨论的那个奇数往前扔,偶数往后扔,但是要保持原来的顺
序那道题是不一样 |
|
p*****2 发帖数: 21240 | 4 来自主题: JobHunting版 - L 电面2
从后往前扫,扫到一个单词就放到那个新的数组里。 |
|
t***t 发帖数: 6066 | 5 说我的解法,看如何。
1. 找到pivot点。pivot点就是最接近key的node.
2. 保持俩指针,一个从pivot往前走一个往后走。
3. 每次每个指针看下一步,哪个abs(node.data-Key)小,那个指针前进一步。
4. 记住总步数,到了m步就停。
总时间复杂度log(n)+m
|
|
j*****7 发帖数: 10575 | 6 感觉大家是不是太过复杂了,还是我看漏边界条件了。最简单的办法是从后往前找。例如
a="ab";
b="ac"
c="abac"
boolean[] visited = new boolean[c.length()]; // 用于标记当前index被用过没有
用a来从c的结尾开始找,都找到了
visited = {true, true, false, false}
然后用b来找那些标记为false的,也是从后向前找,都找到了
最后visited都是true,就成功了,否则return false
时间上是 2N |
|
h****n 发帖数: 1093 | 7 我画个图你就明白了
比如:
head---->node--->node----->node----->node----->NULL
| |
node--->node-->NULL node--->NULL
|
node->NULL
第一次append之后变成:
head---->node--->node----->node----->node--->node--->node---NULL
| |
node--->NULL node-->NULL
第二次append之后变成
head-->node-->node-->node-->node-->node-->node-->node--->NULL
... 阅读全帖 |
|
h****n 发帖数: 1093 | 8 vector的删除可不止O(1),你要把所有后面的元素往前挪的 |
|
c********t 发帖数: 5706 | 9 多谢讲解。基本思路应该就是这样。
但这道题我觉得本身限定很多。
第一,就是要given condition (a[0] >= a[1] && a[n-2] <= a[n-1]) 或者允许两头作
为local min
第二,就是不应该有duplicate (至少duplicate不相邻,否则遇到 a[mid-1] == a[mid
]==a[mid+1] 就不知道往哪里搜了。你的程序这种情况往前搜应该不对。
5,4,2,2,2,2,1,3
5,1,2,2,2,2,3,4
0]
need |
|
p*****2 发帖数: 21240 | 10
我一般都是从后往前的思路,如果recursive就是从前往后。这题你这么搞应该可以吧
,不过我脑子真不愿意这么想了。 |
|
K*****k 发帖数: 430 | 11 动态规划是不是有两种刷法?
一种就是你这样在当前位置就先刷后面位置的。
另外一种是从当前位置往前找,用前面的位置刷当前的位置。
新 |
|
p*****2 发帖数: 21240 | 12
想了想关键是从后往前扫描这点太有用了,我一直没想到。这一点太赞了。看来思路还
是不够灵活。感觉如果对LinkedHashMap不熟,用HashSet+ArrayList也可以了。 |
|
e****e 发帖数: 418 | 13 IMHO, HashSet+ArrayList+从后往前扫描 is the best solution. Time complexity
is log(n+m), n is num of words, m is num of anagrams. The space complexity
is log(m).
Set set = new HashSet();
List list = new ArrayList();
for( int i = words.size()-1; i >= 0; i-- ) {
String sortedWord = sort( words.get( i ).toLowerCase() );
if ( !set.contains( sortedWord ) ) {
set.add( sortedWord );
list.add( word );
}
}
Collections.reverse( list );
return list; |
|
p**o 发帖数: 3409 | 14 往前翻了一下,one-pass 的算法都是一样的。
其实本来就是暖手的练习题,玩不出什么花样来。 |
|
x********u 发帖数: 1150 | 15 来自主题: JobHunting版 - G新鲜面经 非牛人. 供讨论.
1.2 一个数组,找出一个solution使得1st《2nd, 2nd》3rd。。比如15462就是数组1
,2,4,5,6的一个solution。
从结果到条件往前推:
结果: aceg
分开来看:
a
b>c>e>g
明显, b是一个特殊的数, 它大于一半的数, 小于一半的数. 所以b应该是中数. a应该
是b之前的一个数.
d and f 应该是中数后面的数; c,e,g 应该是中数前面的数.
那这样的分析后, 我们可以这么做:
1. 把input array先sort.
2. 把中数和中数前的数挑出来, 做b and a.
3. 中数后面的数挑出来做 d, f, ...
4. 中数前面的数挑出来做 c, e, g, ...
5. interleave 3 and 4
example:
1,2,3, 4,5,6, 7, 8
A. let b be 5, a be 4
B. 4<5<6<7<8
C. 5>3>2>1
interleave 后.
4<5>3<6>2<7>1<8 |
|
s********u 发帖数: 1109 | 16 各种不顺,早上apple来了拒信,下午google面的也不好,阿森纳还输球。。
可能还是沟通能力太差了,应该是很简单的题目,就是不知道他想说什么。
我发觉面试相比leetcode一大难度就是有时候面试官会说的比较vague,要靠自己问。
。要是他每次都直接把题目书写出来,倒是方便多了。。
就是实现一个strchr,只不过第二个参数不是字符,而是字符串,返回第一次出现的指
针。
/*
Find the first occurrence in str of _any_ character in set. Both are NULL
terminated ASCII C-strings. This is like strchr, except that the second
parameter functions as a set, rather than a single character.
str set returns
qxcdef csz str + 2 == &str[2]
axcdef wya str + 0 == &str[0]
axcdef cxa... 阅读全帖 |
|
f******n 发帖数: 208 | 17 以UTF-8为例,一个字符可以由1~4个char组成,通过查第一个字节可以判断该字符总共
有几个字节(其设计类似哈弗曼编码)。
1)构建哈希表的时候,先确定当前字符是几个字节,比如4个,那就把这4个当成一个
字符串,作为key存入哈希。然后跳过这四个字节,继续往前走。
2)扫描字符串的时候同理。 |
|
s********u 发帖数: 1109 | 18 各种不顺,早上apple来了拒信,下午google面的也不好,阿森纳还输球。。
可能还是沟通能力太差了,应该是很简单的题目,就是不知道他想说什么。
我发觉面试相比leetcode一大难度就是有时候面试官会说的比较vague,要靠自己问。
。要是他每次都直接把题目书写出来,倒是方便多了。。
就是实现一个strchr,只不过第二个参数不是字符,而是字符串,返回第一次出现的指
针。
/*
Find the first occurrence in str of _any_ character in set. Both are NULL
terminated ASCII C-strings. This is like strchr, except that the second
parameter functions as a set, rather than a single character.
str set returns
qxcdef csz str + 2 == &str[2]
axcdef wya str + 0 == &str[0]
axcdef cxa... 阅读全帖 |
|
f******n 发帖数: 208 | 19 以UTF-8为例,一个字符可以由1~4个char组成,通过查第一个字节可以判断该字符总共
有几个字节(其设计类似哈弗曼编码)。
1)构建哈希表的时候,先确定当前字符是几个字节,比如4个,那就把这4个当成一个
字符串,作为key存入哈希。然后跳过这四个字节,继续往前走。
2)扫描字符串的时候同理。 |
|
D**********d 发帖数: 849 | 20 从前往后扫一遍,记录前面若全部变成 a 的替换数,与全部变成 b 的替换数。
从后往前扫一遍,记录后面若全部变成 a 的替换数,与全部变成 b 的替换数。
再扫一遍,对每个位置比较这四个数字,找最小的。
可以再优化:
1. 只记录全部变成 a 的替换数
2. 在扫第二遍时就找最小值。 |
|
w********s 发帖数: 214 | 21 而且从后往前读文件貌似不能用buffer啊,如果buffer输出的话,那结果就不是tail了
吧?如果一个buffer一个buffer输出的话,应该是从前往后顺序输出吧? |
|
c******0 发帖数: 260 | 22 从前往后扫,然后再从后往前。版上最近也有人面过这题,你搜搜。挺简单的 |
|
w*******u 发帖数: 10 | 23
就是那么简单,用两个指针往前跑就好了。input可以看成string,不过KMP实在是我想
多了,后来感觉她没想让我写那个。 |
|
d****n 发帖数: 12461 | 24 例如len(P)=4
可以认为目标P就是1,2,3,4
原始S例如1,4,3,2
先考虑non-circular情形。计算所有的unordered pairs。例如上面(4,3),(4,2),(3,2)
就是。操作1只可以让unordered pairs增加或者减少1。所以最小操作就是unordered
pairs数目。
1432->1342->1324->1234
对于circular的情形,操作2可以让位置0的unordered pairs从k变成n-1-k。如果位置0
的数是i,那么就有i-1个unordered pairs,所以这个操作把i移到末尾以后关于i的
unordered pairs就变成了n-i。对于队尾的j,从n-j变成了j-1。i,j之间的交换只能算
一次,所以整体减少是2(i-j-1)+(i>j?),在i=j+1时等于1。
4321->1324->1234
对于中间的数,往前还是往后移动,这个再仔细计算一下。
edit |
|
d****n 发帖数: 12461 | 25 例如len(P)=4
可以认为目标P就是1,2,3,4
原始S例如1,4,3,2
先考虑non-circular情形。计算所有的unordered pairs。例如上面(4,3),(4,2),(3,2)
就是。操作1只可以让unordered pairs增加或者减少1。所以最小操作就是unordered
pairs数目。
1432->1342->1324->1234
对于circular的情形,操作2可以让位置0的unordered pairs从k变成n-1-k。如果位置0
的数是i,那么就有i-1个unordered pairs,所以这个操作把i移到末尾以后关于i的
unordered pairs就变成了n-i。对于队尾的j,从n-j变成了j-1。i,j之间的交换只能算
一次,所以整体减少是2(i-j-1)+(i>j?),在i=j+1时等于1。
4321->1324->1234
对于中间的数,往前还是往后移动,这个再仔细计算一下。
edit |
|
r*******2 发帖数: 104 | 26
好的,我把我的解题过程也说一下。Leetcode原题就不用说了。
第一组:
第1轮:判断subtree。假设两棵树T1和T2,先用DFS在T1里找到和T2的root一样的结点
,然后从找到的结点开始和T2进行比较,我用了BFS,就是用queue,一边一个queue,
同时push/pop进行比较,如果碰到不一样的就return false。做完了想起来其实就是
Leetcode上的Same Tree,直接还用DFS递归比queue省事。
第2轮:找出maze中的path。开一个matrix标记maze的每一个点是否访问过,然后DFS搜
索,从起点开始,查找它的上下左右邻居,如果没有访问过也没有obstacle,就作为一
个选择进行下一步搜索,一直递归下去直到找到终点为止。
第3轮:设计题。
第4轮:ASCII和Kanji字符的题以前面过,当时没做出来,答案就是回来网上搜的(参
考这个网址http://discuss.joelonsoftware.com/default.asp?interview.11.334807.4)。Spiral Matrix是Leetcode原题就不说了。
第... 阅读全帖 |
|
|
m*****k 发帖数: 731 | 28 code起来感觉是比较tedious,
但本质上就是新来的size如果会使当前没填满的block溢出的话就去找block中刚好
sumup等于溢出量的size们(从后往前倒着找保证最小move, 而且可以证明一定可以找
到sumup等于溢出量的size们,这源于size都是2的次方),把他们放入新block,新
来的size加入到当前没填满的block使之填满,输出。
example:
[1 1 1 4 ], incoming 4, overflow 3, find the 3 1's that sumup to 3,
change to
[4 4 ] [1 1 1], 输出 4, 4, 当前没填满的block reset 为 [ 1 1 1] |
|
x*******i 发帖数: 28 | 29
。。
我的做法跟你差不多。区别是先把字符从后往前modify,然后拷回前面去 |
|
x*******2 发帖数: 12 | 30 如果两个词能组成palindrome的话, 那reverse中间短的那个字符串应该是另一个的
prefix
能不能用trie, 然后在trie的node上记录在children都为palindrome的部分.
在建trie的时候, 插入一个string S, 就沿着root开始在S从后往前consume character:
1. 如果S有字符剩余, 那么就判断剩余字符串是否为palindrome, 并在trie的node上标记
2. 如果S没有字符串剩余了, 那返回当前是palindrome的那些字符串
不知道如何做followup... |
|
g***s 发帖数: 3811 | 31 从前往后扫描一遍sumToNow,再从后往前扫描一遍
★ 发自iPhone App: ChineseWeb 8.6 |
|
d**********6 发帖数: 4434 | 32 我老师介绍的办法是这样的,假设一个mXn的sorted matrix,目标t
他的从左上到右下的对角线也是sorted的,用一个binary search找到比t大和比t小的
两个临近点p1, p2
然后p1往后行又binary search
p2往前整行又binary search
复杂度是 O(log(sqrt(mXn))) + O(log(n)))
应该比那个人总结的都好啊 |
|
h****3 发帖数: 89 | 33 为什么要用StringBuilder呀?
不是只要打印么,从后往前一个一个打印就行了吧 |
|
x*****n 发帖数: 195 | 34 逆序扫描bytes的首bit就可以吧?
0,0 -》 one byte
0,1 -》 Not valid
1,0 -》 都有可能,继续往前扫描
1,1 -》 two bytes
byte |
|
t*******2 发帖数: 182 | 35 我也是这么想,不过这题复杂度应该是O(m*n)?
如果每往前走一步,看之前一步的最小cost都要把所有color过一遍的话,不就变成O(m
*m*n)了。。。 |
|
t*******2 发帖数: 182 | 36 我也是这么想,不过这题复杂度应该是O(m*n)?
如果每往前走一步,看之前一步的最小cost都要把所有color过一遍的话,不就变成O(m
*m*n)了。。。 |
|
w******a 发帖数: 236 | 37 是不是要先遍历字典里词的第一个字母,尽量多的往前放,然后依此类推。比如例子里
c,b,f应该要尽量放在第一个位置。 |
|
k****r 发帖数: 807 | 38 3:
从尾巴往前找3变5,
1) 如果找不到在前面加3,后面都变3;
2)如果找到了,变5,后面也都变成3. |
|
a***u 发帖数: 383 | 39 需要啊,双指针,用hashmap记录 start和end之间每个char的次数,如果map size超过
m,start就往前走,直到map size=m位置。最后每个char visit2次 O(2n)=O(n) |
|
l********6 发帖数: 129 | 40 虽然没做过 但是目测复杂度也就是降到nlogn吧 不知道有没有大神能想出线性的解法
nlogn的话就从后往前遍历 用一个set存之前的那些数 然后拿到下一个数的时候 在set
里面找upperbound 然后得出upperbound前面有多少个数 再把这个数插到upperbound之
前 整体上相当于维护一颗bst(实际上是rbtree)
[在 lalo (lalo) 的大作中提到:]
:给一个数组,比如【5,2,6,1】
:对于5,它的右边有两个数字比它小;对于2,它的右边有一个比小;6的右边有1个比
它小;1的右边0个比它小.
:........... |
|
l********6 发帖数: 129 | 41 为什么是O(n)?你的while loop并不能保证每次查找upperbound的时间达到O(1)啊,你
的smaller存的是每一个A[i]的upperbound,但是每次查找的过程都是顺着smaller里面
存的下标往前找,直到找到第一个A[index]可以满足A[i] > A[indx],这是线性不是常
量的复杂度啊,方便的话求详解~~ |
|
l********6 发帖数: 129 | 42 拿个数组装54321
从后往前第一个是0,就是5,remove,数组里面还剩下4321
接下来是1,就是3,remove,数组里还剩下421
接下来是2,就是1,remove,数组里还剩下42
接下来是1,就是2,remove,数组里还剩下4
接下来是0,就是4,remove,数组空
但是复杂度不知道该怎么办。。。 |
|
s******4 发帖数: 24 | 43 Phone(烙印)
1. a lot questions about database sharding/partitioning
2. merge 2 linkedin list(lc 原题 已经问烂了)
onsite(4烙印+1白人)
1. write producer/consumer for multi-threading environment(discussed
condition variable / synchronized), 建议看Java Condition API
2. find k-th largest element in unsorted array(lc 原题 已经问烂了)
3. 还有一个lc原题不记得了 也是很简单的
4. 在一个迷宫里,假设有一个机器人,怎么保证能走到出口。这个不画图比较难描述
。和一般bfs,dfs的区别就是,机器人只记得自己做过的决定(Left->Left->Straight
类似这样),没有整个图的概念。就想想一下自己在走迷宫好了。答案就是,一直往左
走,走到尽头就往回,没有左就往前走,没有前就往右走。然后会有一些followu... 阅读全帖 |
|
f*******r 发帖数: 976 | 44 祝LZ早日拿到大offer,eBay,PayPal等都是烙印的老巢,不去也罢
Phone(烙印)
1. a lot questions about database sharding/partitioning
2. merge 2 linkedin list(lc 原题 已经问烂了)
onsite(4烙印+1白人)
1. write producer/consumer for multi-threading environment(discussed
condition variable / synchronized), 建议看Java Condition API
2. find k-th largest element in unsorted array(lc 原题 已经问烂了)
3. 还有一个lc原题不记得了 也是很简单的
4. 在一个迷宫里,假设有一个机器人,怎么保证能走到出口。这个不画图比较难描述
。和一般bfs,dfs的区别就是,机器人只记得自己做过的决定(Left->Left->Straight
类似这样),没有整个图的概念。就想想一下自己在走迷宫好了。答案就是,一直往左... 阅读全帖 |
|
f*********r 发帖数: 7485 | 45 命运,就像我的自行车车轮下的路。你不能改变它,只能一圈又一圈的,往前面骑 |
|
|
p*****p 发帖数: 19331 | 47 往前面突出是正常的,几乎所有的冰箱都这样,除了非常小的 |
|
s*****l 发帖数: 242 | 48 我们后院侧园的fence都是大家share的。我们家的后院门就直接对着后院,而邻居家的
后院门却开在我们两家之间的这个侧园这边。因为我们的房子间距窄,侧园比较窄。目
前他们的fence门就在他们房子后院门旁边一些,所以他们的patio的空间就不是很大。
现在邻居想把我们之间侧园的fence延伸到屋子前面去,然后把门也挪过去。这样他们
的侧园空间就大了。现在quote的是延长fence 1500刀。估计这个1500还包括把他们的
fence门往前面挪的价钱?不清楚了。不知道我们家要是挪门还要多少钱?邻居想来找
我们split这1500刀的cost。
我们没有更多围起来的侧园的空间的需求,我们后院以及patio的空间已经足够了。而
且因为两家距离离得近,建好fence以后其实会挡住我们的光线的,因为他们家在我们
的东边,地势也比我家高,还是2层的。所以我们不想split这个cost,但是如果他们要
做,我们也不反对。一开始谈过以后,邻居家里男的还比较合理说理解我们啊,我们确
实也没啥需求啊。结果我们谈完1个小时他就打电话来说,他老婆说,我们也有好处的
啊,增加privacy啊。这个倒是实话... 阅读全帖 |
|
|
m*****8 发帖数: 2323 | 50 我怎么觉得自己大肚子很恶心阿,我每天都尽量穿宽松的衣服,直到二个星期前,人家
都不相信我将近6个月了。我体重也长了不少,但是,肚子的形状不是光往前面长,而
是在腰部均匀膨胀,真奇怪。 |
|