Redian新闻
>
请问照片后面如何写上姓名和a number
avatar
请问照片后面如何写上姓名和a number# Immigration - 落地生根
f*9
1
两人,没人45分钟。
第一个:从一个array里找出等于t的数,把它们放到array后面,其他元素相对位置保
持不变,顺次迁移;
第二个:一个m x n的方格,从左上角到右下角走,只能向右或向下,总共几种走法。
问题很简单又是老题。我也都答出来了,code也写了。第二个问题我开始用计算组合数
的方法,面试官还没见过这种解法。但是最后仍然被拒了。感觉可能是答题太慢了?或
者听力不好老让第一个面试官重复问题?没办法。。。
avatar
a*u
2
按照皮匠的步骤,在照片后面用铅笔写名字,但是表面太光滑,咋都无法写下字,那如
何办?
谢谢。
avatar
X*n
3
第二题dp啊
设每个格的走法为t(x,y),
if (x==1||y==1)
t(x, y)=1
else
t(x, y)=t(x-1, y)+t(x, y-1)

【在 f****9 的大作中提到】
: 两人,没人45分钟。
: 第一个:从一个array里找出等于t的数,把它们放到array后面,其他元素相对位置保
: 持不变,顺次迁移;
: 第二个:一个m x n的方格,从左上角到右下角走,只能向右或向下,总共几种走法。
: 问题很简单又是老题。我也都答出来了,code也写了。第二个问题我开始用计算组合数
: 的方法,面试官还没见过这种解法。但是最后仍然被拒了。感觉可能是答题太慢了?或
: 者听力不好老让第一个面试官重复问题?没办法。。。

avatar
w*r
4
实在不行用细的Sharpie marker.
avatar
r*u
5
显然是组合数学的方法好啊

【在 X*********n 的大作中提到】
: 第二题dp啊
: 设每个格的走法为t(x,y),
: if (x==1||y==1)
: t(x, y)=1
: else
: t(x, y)=t(x-1, y)+t(x, y-1)

avatar
e*e
6
use marker and write on hard surface, don't let the ink penetrate though.
avatar
X*n
7
解释下呢?

【在 r***u 的大作中提到】
: 显然是组合数学的方法好啊
avatar
a*u
8
非常感谢!
avatar
f*9
9
我说用dp了。
感觉挺莫名其妙被拒的。第一个面试官问完了还说it‘s good,第二个面试官连计算组
合数的方法都不会。
可能是我听力不太好交流有点问题让他们印象是比较笨?还是我答题太慢了?莫非这种
难度的题45分钟应该完成多个,每个都在白板上完成code,才算合格了?

【在 X*********n 的大作中提到】
: 第二题dp啊
: 设每个格的走法为t(x,y),
: if (x==1||y==1)
: t(x, y)=1
: else
: t(x, y)=t(x-1, y)+t(x, y-1)

avatar
A*r
10
铅笔可以写的。换个软点芯。2 works better than HB.
avatar
P*7
11
第二题很简单,不用dp,等价于m+n个数里面取m个数,答案是c(m+n, m)

【在 f****9 的大作中提到】
: 两人,没人45分钟。
: 第一个:从一个array里找出等于t的数,把它们放到array后面,其他元素相对位置保
: 持不变,顺次迁移;
: 第二个:一个m x n的方格,从左上角到右下角走,只能向右或向下,总共几种走法。
: 问题很简单又是老题。我也都答出来了,code也写了。第二个问题我开始用计算组合数
: 的方法,面试官还没见过这种解法。但是最后仍然被拒了。感觉可能是答题太慢了?或
: 者听力不好老让第一个面试官重复问题?没办法。。。

avatar
d*s
12
我用圆珠笔
avatar
f*9
13
我说了,面试官还没见过用组合数的方法。
但是还是让写程序,而且要考虑有obstacle的情况,就是考虑有的方格不能通过的情况
。这种情况好像不能用组合数直接算吧?

【在 P*******7 的大作中提到】
: 第二题很简单,不用dp,等价于m+n个数里面取m个数,答案是c(m+n, m)
avatar
P*7
14
对于第二个问题,如果面试官就问了这一题,你花的时间就长了。因为这道题后面还有
一问,如果你保
持向下的步子一直多于或等于你向右的步子,一共多少种走法。

【在 f****9 的大作中提到】
: 我说用dp了。
: 感觉挺莫名其妙被拒的。第一个面试官问完了还说it‘s good,第二个面试官连计算组
: 合数的方法都不会。
: 可能是我听力不太好交流有点问题让他们印象是比较笨?还是我答题太慢了?莫非这种
: 难度的题45分钟应该完成多个,每个都在白板上完成code,才算合格了?

avatar
P*7
15
这道题不是google经典题目么?面试者怎么会不知道组合数方法呢...那你太冤了

【在 f****9 的大作中提到】
: 我说了,面试官还没见过用组合数的方法。
: 但是还是让写程序,而且要考虑有obstacle的情况,就是考虑有的方格不能通过的情况
: 。这种情况好像不能用组合数直接算吧?

avatar
s*y
16
第一题,pass一遍找到有多少t,从第一个t开始顺着写非t数,最后填t。
还有什么更好的解法么。
avatar
j*u
17
第一遍就可以把非t前移,然后从最后一个位置把t填上

【在 s********y 的大作中提到】
: 第一题,pass一遍找到有多少t,从第一个t开始顺着写非t数,最后填t。
: 还有什么更好的解法么。

avatar
j*u
18
c# implementation,还有没有更好方法?
static void ArrayShift(T[] array, T seed) where T:IComparable
{
if (array == null)
throw new ArgumentNullException("array");
int dest = 0;
for (int i = 0; i < array.Length; ++i)
{
if (i != dest && !array[i].Equals(seed))
{
array[dest++] = array[i];
}
}
for (int i = dest; i < array.Length; ++i)
{
array[i] = seed;
}
}

【在 j*****u 的大作中提到】
: 第一遍就可以把非t前移,然后从最后一个位置把t填上
avatar
r*g
19
我google第二题,竟然在“小学生VBS竞赛题库“里有。提示是杨辉三角算法或者回溯
法。这个回溯法应该就是DP, 杨辉三角是个什么?
avatar
d*e
20
你的方法是对的,但code是不是写错了点?
1, 2, 3, 4, 5, 6, 7, 8
seed = 5
但由于dest一直等于0,所以6不幸被换到去1的位置了.

【在 j*****u 的大作中提到】
: c# implementation,还有没有更好方法?
: static void ArrayShift(T[] array, T seed) where T:IComparable
: {
: if (array == null)
: throw new ArgumentNullException("array");
: int dest = 0;
: for (int i = 0; i < array.Length; ++i)
: {
: if (i != dest && !array[i].Equals(seed))
: {

avatar
c*2
21
Original Array: 22 22 55 55 55 55 55 33 33 33
num=22:freq=2
num=55:freq=5
num=33:freq=3
Rotate 2:
55 55 55 55 55 33 33 33 22 22
Moved 44 to back:
0 moved:
55 55 55 55 55 33 33 33 22 22
Moved 33 to back:
3 moved:
55 55 55 55 55 22 22 33 33 33
avatar
c*2
22
int move_num_to_array_end(int array[], int size, int num)
{
int i=0,j,from;
int count=0;
int total=0;
int tail=size;
while(icount=0;
from=i;
while((array[i]==num)&&(iif (i>=tail-1) return total;

if (count) {
for(j=i;jarray[j-count]=array[j];
tail -= count;

for(j=tail;jarray[j]=num;

i=from;
}
else
i++;
}

return total;
}
avatar
f*r
23
请问这样做可以么?
// 从一个array里找出等于t的数, 把它们放到array后面, 其他元素相对位置保持不变
, 顺次迁移.
void move_num_to_array_end(int array[], int size, int t) {
int idx = 0;
for (int i = 0; i < size; i++) {
int curInt = array[i];
if (curInt != t) {
array[idx] = array[i];
idx++;
}
}
for (;idx < size; idx++)
array[idx] = t;
}
// 一个m x n的方格, 从左上角到右下角走, 只能向右或向下, 总共几种走法.
int move_topleft_to_bottomright(int m, int n) {
if (m == 1 || n == 1)
return 1;
return (move_topleft_to_bottomright(m-1,n)+move_topleft_to_bottomright(m
,n-1));
}
avatar
c*2
24
very good. Much cleaner than mine.

【在 f*******r 的大作中提到】
: 请问这样做可以么?
: // 从一个array里找出等于t的数, 把它们放到array后面, 其他元素相对位置保持不变
: , 顺次迁移.
: void move_num_to_array_end(int array[], int size, int t) {
: int idx = 0;
: for (int i = 0; i < size; i++) {
: int curInt = array[i];
: if (curInt != t) {
: array[idx] = array[i];
: idx++;

avatar
g*6
25
第2题如果编程做,都不难。
如果用组合做,答案是等价于m+n-2个数里面取m-1个数,答案是c(m+n-2, m-1).因为总
共要走m+n-2,要在里面选m-1步向下走,或选n-1步向右走。
如果向下的步数不能超过向右的步数,该怎么算?

【在 P*******7 的大作中提到】
: 第二题很简单,不用dp,等价于m+n个数里面取m个数,答案是c(m+n, m)
avatar
f*r
26
我觉得应该是c(m+n-2, n-1) 或者 c(m+n-2, m-1).

【在 P*******7 的大作中提到】
: 第二题很简单,不用dp,等价于m+n个数里面取m个数,答案是c(m+n, m)
avatar
g*s
27
如果有方格不能通过的情况,确实会比较麻烦。不过还是组合问题。

【在 f****9 的大作中提到】
: 我说了,面试官还没见过用组合数的方法。
: 但是还是让写程序,而且要考虑有obstacle的情况,就是考虑有的方格不能通过的情况
: 。这种情况好像不能用组合数直接算吧?

avatar
g*s
28
还有优化的余地。如果数组里全是t,那第二个循环没必要了。不过不影响复杂度。

【在 f*******r 的大作中提到】
: 请问这样做可以么?
: // 从一个array里找出等于t的数, 把它们放到array后面, 其他元素相对位置保持不变
: , 顺次迁移.
: void move_num_to_array_end(int array[], int size, int t) {
: int idx = 0;
: for (int i = 0; i < size; i++) {
: int curInt = array[i];
: if (curInt != t) {
: array[idx] = array[i];
: idx++;

avatar
l*i
29
这两个是等价的把

【在 f*******r 的大作中提到】
: 我觉得应该是c(m+n-2, n-1) 或者 c(m+n-2, m-1).
avatar
x*3
30
用类似quick sort里得partition, 只要一次遍历数组就可以了, 但是需要3个指针

【在 g*********s 的大作中提到】
: 还有优化的余地。如果数组里全是t,那第二个循环没必要了。不过不影响复杂度。
avatar
f*r
31
sorry, cannot type Chinese in the lab.....
I think a easy fix would be #ofways(topleft->bottomright) - #ofways(topleft-
>blockA)*#ofways(blockA->bottomright) if you only face one blockA.
But it's more complicated when you face more than one blocks.

【在 g*********s 的大作中提到】
: 如果有方格不能通过的情况,确实会比较麻烦。不过还是组合问题。
avatar
e*6
32
void mv_t_to_end(int *a, int size, int t){
int i=0,j=0,k=size;
while(jif(a[j]==t){
j++;
k--;
}
else
a[i++]=a[j++];
}
while(ka[k++]=t;
}
avatar
h*6
33
如果格子不多,障碍不少,令f(i, j)为各格子通往右下角的走法数,则:
f(n-1, m-1) = 1
f(i, j) = f(i+1, j) + f(i, j+1), if a[i][j]==1
f(i, j) = 0, if a[i][j]==0
f(0, 0)就是所求答案
如果格子不少,障碍不多,那么可以用包含与排除解决。
avatar
i*e
34
这个解法不对,有 bug.
test case:
{22,11,33,33,44,22,11}
t = 22,
output=
{11 33 33 44 44 22 22}
expected=
{11 33 33 44 11 22 22}
第一题的解:
void shiftArrayEqualsTBack(int num[], int n, int t) {
int total = 0;
for (int i = 0; i < n; i++) {
if (num[i] == t)
total++;
else
num[i-total] = num[i];
}
for (int i = n-total; i < n; i++) {
num[i] = t;
}
}
第二题的解:
const int X_MAX = 4;
const int Y_MAX = 4;
bool validLocation(int x, int y) {
if (x <= -1 || x >= X_MAX || y <= -1 || y >= Y_MAX) return false;
return true;
}
bool canReach(int map[][Y_MAX], int x, int y, bool visited[][Y_MAX]) {
if (!validLocation(x, y)) return false;
if (map[x][y]) return false;
if (x == X_MAX-1 && y == Y_MAX-1) return true;
if (visited[x][y]) return false;
visited[x][y] = true;

return canReach(map, x, y-1, visited) ||
canReach(map, x+1, y, visited) ||
canReach(map, x, y+1, visited) ||
canReach(map, x-1, y, visited);
}
int main() {
int map[X_MAX][Y_MAX] = {
{0,0,1,0},
{1,0,1,0},
{0,1,0,1},
{0,1,0,0}
};
bool visited[X_MAX][Y_MAX] = {false};
cout << canReach(map, 0, 0, visited);
return 0;
}
一些常见面试题的答案与总结 -
http://www.ihas1337code.com

【在 e**********6 的大作中提到】
: void mv_t_to_end(int *a, int size, int t){
: int i=0,j=0,k=size;
: while(j: if(a[j]==t){
: j++;
: k--;
: }
: else
: a[i++]=a[j++];
: }

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。