谷歌面試題 吃糖問題

2021-08-25 17:38:33 字數 1616 閱讀 3494

看到上面這個部落格中的一道面試題,如下

有乙個n*n的棋盤,上面有m個糖果,最開始有乙個人在棋盤左上角,他可以向左向右或者向下移動,但不能向上移動,問他最少需要多少步吃完所有糖果。

寫一下自己的思路和**,因為沒有oj可以驗證,不知道對錯,暫且記錄一下。

思路:動態規劃求解

動規計算如果從該位置進入下一行(本行及上面所有行的糖果均已拿到),此時走的最少步數。

我們只要是到一行的進入位置和離開位置,根據糖果的位置拿到這一行糖果的步數就是固定的,所以計算dp[i][j]就是從i-1行的每乙個位置當做入口,找到最小的步數即為dp[i][j]的值。

糖果的位置 只需要記錄每一行最左和最右糖果的位置即可。

注意:向下走的那一步要記得加上。

動態規劃的空間優化,可以使用兩行的陣列。

可能存在一整行都沒有糖果的情況。

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

vector

> input()

return res;

}int min_steps(const

vector

>& data)

//est[0][0]=0;

//est[0][1]=0;

for(int i=0;ifor(int j=0;jif(data[i][j]) continue;

if(j0]) est[i][0]=j;

if(j>est[i][1]) est[i][1]=j;}}

for(int i=0;icout

<0]<<" "

<1]<<"est"

int m[2][2];

m[0][0]=2*est[0][1]-est[0][0];

m[0][1]=est[0][1];

cout

<0][0]<<" "

<0][1]<<"m[0]"

int a=m[0][0],b=m[0][1];

for(int i=1;i1-step;

if(est[i][1]0])

m[step][0] = est[i][1]-est[i][0]+min(m[1-step][0]+abs(est[i][1]-est[i-1][0]),m[1-step][1]+abs(est[i][1]-est[i-1][1]))+1;

m[step][1] = est[i][1]-est[i][0]+min(m[1-step][0]+abs(est[i][0]-est[i-1][0]),m[1-step][1]+abs(est[i][0]-est[i-1][1]))+1;

cout

<0]<<" "

<1]<<" "

<1][0]<<" "

<1][1]<<"estfor"

<0]<<" "

<1]<<"m[step]"

<0];

b=m[step][1];

}return min(a,b);

}int main()

谷歌面試題

這個所謂的面試沒有物理存在,只是邏輯上等同於。題目要求如下 整數序列q中的每個元素都至少能被整數a和b中的乙個整除,現給定a和b,請計算出q中的前n項元素。例如,當a 3,b 5,n 6時,q序列的前6項元素為3,5,6,9,10,12。1 設計函式void generate int a int b...

谷歌面試題

某獵頭收集了140多個google的面試題,都張到他的blog中了,主要是下面這些職位的,因為被牆,且無任何敏感資訊,所以,我原文搬過來了。這篇blog例舉了google用來面試下面這幾個職位的面試題。很多不是很容易回答,不過都比較經典與 是google,microsoft,amazon之類的公司的...

谷歌的面試題

幾星期前,乙個朋友接受了google公司的面試,他透露了面試中的一些問題。順便,我把從其他幾個曾經面試過的人那裡聽來的內容也整理在一起。最大的網際網路公司google的乙份面試題集,看看你是否能夠回答出來。其中很多問題都是開放式的,正確的解答有許多種,所以在這裡就不提供答案了。一輛學校班車裡面能裝多...