※ 引述《gocreating (小平)》之铭言:
: 标题: [心得] Wearisma 面试心得
: 时间: Sat Mar 3 16:37:21 2018
:
: 网页好读版:https://goo.gl/ZegAep
:
: Technical Task
:
: 题目长这样:
:
: Given a string with left and right parentheses, how you verify the string is
: valid (balanced)
: Ex. ((())()()()) -> Valid, ()) → Invalid
这个问题仅需一个整数变量出值为0,定义遇到(整数+1,遇到)整数-1,
O(n)扫一遍,在扫的过程中整数为负即为Invalid,最后结果整数不为0即为Invalid
special case是空字串,默认整数为0为Valid,但是要看题目定义,
有些题目可能认为空字串是Invalid,这个case视情况客制。
:
:
: 第二阶段面试
:
: 第二阶段是纯粹的Coding Test,面试官开了一个共同编辑的google docs给我,上面已经
: 列好题目如下:
:
: Given an array A, write a function to move all 0's to the end of it while
: maintaining the relative order of the non-zero elements. For example, A = [0,
: 1, 0, 3, 12], after calling your function, A should be [1, 3, 12, 0, 0].
:
: 乍看下会觉得很简单,开新的阵列来存不就好了,但是往下一看附带了2项限制:
:
: Note:
: You must do this in-place without making a copy of the array.
: Minimize the total number of operations.
这个问题仅需使用二个整数变量扫一次O(n)解决。
二个变量都是当作index,一个负责遇到0,一个负责遇到非0
遇到非0就把值copy到0的index,然后0的index + 1
最后跑完把0的index后面位置全部填0
int zero_i = 0, non_zero_i = 0;
while(non_zero_i < length_of_array) {
if(A[non_zero_i] != 0) {
A[zero_i] = A[non_zero_i];
zero_i += 1;
}
non_zero_i += 1;
}
while(zero_i < length_of_array) {
A[zero_i] = 0;
zero_i += 1;
}
学生时期练ACM到800题AC打住,结果工作写组语,转行IT也没考过这类白板。
解题这真的要视行业是否有需要才练,能把心态调整成兴趣是最好了。