1.魔術索引(1)
classmagicindex
}return
false
; }
};
切記二分查詢是left<=right...
2.魔術索引2(切記抓住資料規律)
classmagicindex
private
:
bool find(vector& data,const
int& len,int left,int
right)
};
3.機械人走方格
看著別人的思路,盡然能錯n次,陣列越界都不知道。。。無語
classrobot ;
//注意數值是否越界
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。。。
classcoins
private
:
int getnum(int
n) ;
int dpcoin[100001] = ;
dpcoin[
0] = 1
;
for (i = 0; i < 4; i++)
}return
dpcoin[n];
}};
3.輸出單層二叉樹節點
classtreelevel
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
classplus
if(tmp1)
}if(tmp2)
}if(sign)
pnode = res->next;
delete
res;
return
pnode;
}};
5.最小調整有序
有乙個整數陣列,請編寫乙個函式,找出索引m和n,只要將m和n之間的元素排好序,整個陣列就是有序的。
注意:n-m應該越小越好,也就是說,找出符合條件的最短序列。
classrearrange
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...