程式設計師面試金典2

2022-01-15 11:33:09 字數 1811 閱讀 1208

1.魔術索引(1)

class

magicindex

}return

false

; }

};

切記二分查詢是left<=right...

2.魔術索引2(切記抓住資料規律)

class

magicindex

private

:

bool find(vector& data,const

int& len,int left,int

right)

};

3.機械人走方格

看著別人的思路,盡然能錯n次,陣列越界都不知道。。。無語

class

robot ;

//注意數值是否越界

for (i = 0; i < x; i++)

for (i = 0; i < y; i++)

for (i = 1; i < x; i++)

}return vec[x-1][y-1

]; }

};

4.硬幣表示

沒看懂,待後續進一步學習dp。。。

class

coins

private

:

int getnum(int

n) ;

int dpcoin[100001] = ;

dpcoin[

0] = 1

;

for (i = 0; i < 4; i++)

}return

dpcoin[n];

}};

3.輸出單層二叉樹節點

class

treelevel

int nextlevel = 0, delnum = 1, depth = 1

; listnode *res = null, *pnode;

queue

sdata;

sdata.push(root);

while (!sdata.empty())

else

}if (tmp->left !=null)

if (tmp->right !=null)

--delnum;sdata.pop();

if (0 ==delnum)

}return

res;

}};

4.鏈式a+b

class

plus

if(tmp1)

}if(tmp2)

}if(sign)

pnode = res->next;

delete

res;

return

pnode;

}};

5.最小調整有序

有乙個整數陣列,請編寫乙個函式,找出索引m和n,只要將m和n之間的元素排好序,整個陣列就是有序的。

注意:n-m應該越小越好,也就是說,找出符合條件的最短序列。

class

rearrange

if (left == n) //

a為有序陣列

return

res;

while (right >=left)

res[

0] =left;

res[

1] =right;

return

res;

}};

程式設計師面試金典

1.有個小孩正在上樓梯,樓梯有n階台階,小孩一次可以上1階 2階 3階。請實現乙個方法,計算小孩有多少種上樓的方式。為了防止溢位,請將結果mod 1000000007 給定乙個正整數intn,請返回乙個數,代表上樓的方式數。保證n小於等於100000。int countways int n retu...

程式設計師面試金典 2 2

return kth to last 返回單鏈表中倒數第k個元素。下面會分別使用遞迴和非遞迴的方法來解決這道題,一般來說遞迴的方法寫起來更容易,但是效率一般不是最好的,比如這道題遞迴解法的 量大約是非遞迴解法的一半,但是時間複雜度依然是o n 遞迴解法。這種方法的本質是先遍歷到鍊錶尾部,最後再返回的...

程式設計師面試金典 2 4

partition 編寫 將鍊錶中小於x的元素放在鍊錶的前半部分,大於x的元素放在鍊錶的後半部分,沒有順序要求。如果是陣列的話,根據x對陣列進行劃分的方法類似於快排。對於鍊錶會更簡單一些,可以直接將原始鍊錶拆分為兩個鍊錶,乙個中所有元素比x小,乙個中所有元素比x大,最後再進行連線。通過在鍊錶中使用b...