專注於機器學習,深度學習,人臉識別領域。
劍指offer是比較經典的面試題目,我決定在牛客網上做一下,把沒做好的題記錄下來。
1.請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。
class Solution {
public:
void replaceSpace(char *str,int length) {
if(length<=0||str==NULL) return;
char* temp=str;
int lenori=0;int num=0;
while (*temp!='\0'){
lenori++;
if(*temp==' ') num++;
temp++;
}
int lennew=num*2+lenori;
if(lennew>length) return;
int indexnew=lennew;
int indexold=lenori;
while(indexold>=0){
if(str[indexold]==' '){
str [indexnew--]='0';
str[indexnew--]='2';
str[indexnew--]='%';
}
else {
str[indexnew--]=str[indexold];
}
indexold--;
}
}
};
2.輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
return buildtree(pre,vin,0,pre.size()-1);
}
TreeNode* buildtree(vector<int>& pre,vector<int>& vin,int first,int end){
if(pre.empty()||first>end) return NULL;
int val=pre.front();
auto mid=pre.begin();
pre.erase(mid);
auto it=vin.begin()+first;
for(;it!=vin.begin()+end+1;it++){
if(*it==val) break;
}
TreeNode* root=new TreeNode(val);
root->left=buildtree(pre,vin,first,it-vin.begin()-1);
root->right=buildtree(pre,vin,it-vin.begin()+1,end);
return root;
}
};
3.輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。
雖然這道題我ac了,但是還是值得分享一下,主要是竟然連負數也可以不斷地去掉最後一個1,這個演算法還是挺牛逼的。
class Solution {
public:
int NumberOf1(int n) {
//if(n>0){
int num=0;
while(n){
n=n&(n-1);
num++;
}
//}
return num;
}
};
4.我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?
class Solution {
public:
int rectCover(int number) {
if(number<3) return number;
int first=1,second=2,val=0;//斐波那契數列
for(int i=3;i<=number;i++){
val=first+second;
first=second;
second=val;
}
return val;
}
};
4.輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
發現這種題還是不怎麼會做
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int > res;
if(matrix.empty()||matrix[0].empty()) return res;
int m=matrix.size();
int n=matrix[0].size();
int c=m>n?(n+1)/2:(m+1)/2;
int p=m,q=n;
for(int i=0;i<c;i++,q-=2,p-=2)
{
for(int col=i;col<i+q;col++)
res.push_back(matrix[i][col]);
for(int row=i+1;row<i+p;row++)
res.push_back(matrix[row][i+q-1]);
if(p==1||q==1) break;
for(int col=i+q-2;col>=i;col--)
res.push_back(matrix[i+p-1][col]);
for(int row=i+p-2;row>i;row--)
res.push_back(matrix[row][i]);
}
return res;
}
};
5.定義棧的資料結構,請在該型別中實現一個能夠得到棧最小元素的min函式。
第二個棧存當前最小值,再次壓進去
#include<algorithm>
class Solution {
public:
void push(int value) {
minvalue=std::min(value,minvalue);
stack1.push(value);
stack2.push(minvalue);
}
void pop() {
stack1.pop();
stack2.pop();
}
int top() {
return stack1.top();
}
int min() {
return stack2.top();
}
private:
stack<int> stack1;
stack<int> stack2;
int minvalue=INT_MAX;
};
6.輸入一個複雜連結串列(每個節點中有節點值,以及兩個指標,一個指向下一個節點,另一個特殊指標指向任意一個節點),返回結果為複製後複雜連結串列的head。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)
這道題的陷阱是 一定要把原來的連結串列恢復原狀,不能損壞原來的連結串列。
/*
struct RandomListNode {
int label;
struct RandomListNode *next, *random;
RandomListNode(int x) :
label(x), next(NULL), random(NULL) {
}
};
*/
class Solution {
public:
RandomListNode* Clone(RandomListNode* pHead)
{
if(!pHead) return pHead;
RandomListNode* step=pHead;
while(step){
RandomListNode* node=new RandomListNode(step->label);
RandomListNode* nextnode=step->next;
step->next=node;
node->next=nextnode;
step=nextnode;
}
step=pHead;
while(step){
if(step->random)step->next->random=step->random->next;
else step->next->random=NULL;
step=step->next->next;
}
step=pHead;
RandomListNode* newhead=new RandomListNode(0);
RandomListNode* now=newhead;
while(step){
now->next=step->next;
if(now->next)step->next=now->next->next;//千萬注意,一定要把原來的連結串列恢復原狀,不能損壞原來的連結串列。
now=now->next;
step=step->next;
}
return newhead->next;
}
};
7.輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。
這道題就是要調,維護一個vector 存最小的k個數,然後按照順序更新就行。
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
if(k>input.size()) return {};
vector<int> res(k,0);
int i=0;
for(;i<k;i++){
res[i]=input[i];
}
sort(res.begin(),res.end());
for(;i<input.size();i++){
int j=0;
for(;j<k;j++){
if(input[i]<=res[j])
break;
}
if(j<k){
int m=0;
for(m=k-1;m>j;m--){
res[m]=res[m-1];
}
res[j]=input[i];
}
}
return res;
}
};
8.請實現一個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。
這道題不難,核心是遞迴函式的輸入時兩個,是左右。左的左,右的右。右的左,左的右。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot)
{
if(!pRoot) return true;
return solve(pRoot->left,pRoot->right);
}
bool solve(TreeNode* left,TreeNode* right){
if((!left)&&(!right)) return true;
if((left==NULL)||(right==NULL)) return false;
if(left->val!=right->val) return false;
return solve(left->left,right->right)&&solve(left->right,right->left);
}
};
9.在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->4->5 處理後為 1->2->5
這道題最重要的是處理邊界條件,比較消耗時間。經驗就是凡是要考慮->next的屬性,如->next->next或者->next->val的,都要考慮->next存不存在。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
ListNode* newhead=new ListNode(0);
ListNode* first=pHead;
ListNode* now=newhead;
while(first){
while(first&&first->next&&first->next->val==first->val){
int mid=first->val;
while(first&&mid==first->val)
first=first->next;
}
now->next=first;
if(first)first=first->next;
now=now->next;
}
return newhead->next;
}
};
相關推薦
專注於機器學習,深度學習,人臉識別領域。
劍指offer是比較經典的面試題目,我決定在牛客網上做一下,把沒做好的題記錄下來。 1.請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。 class So
大數據、人工智能、機器學習、深度學習,這些到底在說什麽?
大數據 大數據學習 編程語言 大數據開發 1,大數據、人工智能、機器學習、深度學習的關系。 大數據,或者說大數據分析平臺,更具體一點就是大數據分析PaaS平臺,其實是一種針對需要處理海量數據統計分析的PaaS雲平臺。 大數據學習可以加群:199427210 如果你正在學習大數據 ,小編歡迎
讀懂人工智慧、機器學習、深度學習、大資料,自然語言處理……
從機器學習談起 在本篇文章中,我將對機器學習做個概要的介紹。本文的目的是能讓即便完全不瞭解機器學習的人也能瞭解機器學習,並且上手相關的實踐。這篇文件也算是EasyPR開發的番外篇,從這裡開始,必須對機器學習瞭解才能進一步介紹EasyPR的核心。當然,本文也面對一般讀者,不會
人工智慧,機器學習,神經網路,深度學習的關係
目錄 機器學習 有監督學習和無監督學習 神經網路 剛剛接觸人工智慧的內容時,經常性的會看到人工智慧,機器學習,深度學習還有神經網路的不同的術語,一個個都很高冷,以致於傻傻分不清到底它們之間是什麼樣的關係,很多時候都認為是一個東西的不同表達而已,看了一些具體的介紹後才漸漸有了一個大
38套大資料,雲端計算,架構,資料分析師,Hadoop,Spark,Storm,Kafka,人工智慧,機器學習,深度學習,專案實戰視訊教程
38套大資料,雲端計算,架構,資料分析師,Hadoop,Spark,Storm,Kafka,人工智慧,機器學習,深度學習,專案實戰視訊教程 視訊課程包含: 38套大資料和人工智慧高階課包含:大資料,雲端計算,架構,資料探勘實戰,實時推薦系統實戰,電視收視率專案實戰,實時流統計專案實戰,離線電
機器學習 vs 深度學習到底有啥區別,為什麼更多人選擇機器學習
機器學習和深度學習有什麼區別?讓我們從本文中尋找答案。 目標 本文中,我們將深度學習與機器學習作比較。我們將逐一瞭解他們。我們還會討論他們在各個方面的不同點。除了深度學習和機器學習的比較,我們還將研究它們未來的趨勢。 對比介紹深度學習和機器學習 一. 什麼是機器學習? 通常
機器學習與深度學習系列連載: 第二部分 深度學習(十六)迴圈神經網路 4(BiDirectional RNN, Highway network, Grid-LSTM)
深度學習(十六)迴圈神經網路 4(BiDirectional RNN, Highway network, Grid-LSTM) RNN處理時間序列資料的時候,不僅可以正序,也可以正序+逆序(雙向)。下面顯示的RNN模型,不僅僅是simple RNN,可以是LSTM,或者GRU 1 B
機器學習與深度學習系列連載: 第二部分 深度學習(十二)卷積神經網路 3 經典的模型(LeNet-5,AlexNet ,VGGNet,GoogLeNet,ResNet)
卷積神經網路 3 經典的模型 經典的卷積神經網路模型是我們學習CNN的利器,不光是學習原理、架構、而且經典模型的超引數、引數,都是我們做遷移學習最好的源材料之一。 1. LeNet-5 [LeCun et al., 1998] 我們還是從CNN之父,LeCun大神在98年提出的模
未明學院:機器學習vs深度學習,如何規劃學習與就業路徑
自2016年以來,業界掀起一股人工智慧的熱潮。 2017年初,AlphaGo化身網路棋手Master擊敗聶衛平、柯潔、樸廷桓、井山裕太在內的數十位中日韓圍棋高手,在30秒一手的快棋對決中,無一落敗,拿下全勝,在棋界和科技界引發劇震。這使人們認識到AI(Artifical Intelligence
Java,大資料,機器學習,深度學習,學習資源
Java,大資料,機器學習,深度學習,學習資源 Java 基礎 Java 程式設計思想 Java Web 和大資料 Spark 中文文件 Storm 中文文件 Kafka 中文文件 Flink 中文文件 Beam 中
深度學習,周志華,機器學習,西瓜書,TensorFlow,Google,吳軍,數學之美,李航,統計學習方法,吳恩達,深度學習筆記,pdf下載
1. 機器學習入門經典,李航《統計學習方法》 2. 周志華的《機器學習》pdf 3.《數學之美》吳軍博士著pdf 4. Tensorflow 實戰Google深度學習框架.pdf 5.《TensorFlow實戰》黃文堅 高清完整PDF 6. 復旦大
人工智慧,深度學習,計算機視覺,自然語言處理,機器學習,百度網盤視訊教程
人工智慧,深度學習,計算機視覺,自然語言處理,機器學習視訊教程下載: 1. CS224D 2. NLP到Word2vec 3. Opencv3影象處理 4. Tensorflow 5. 機器學習 6. 人工智慧課程 7. 聊天機器人視訊教程 8. 自然語言處理 獲取檔案下載連結
人工智能,神經網絡算法,機器學習,深度學習三者關系
per mach sed 效果 gist 集成 支持向量機 事先 clas 對於很多初入學習人工智能的學習者來說,對人工智能、機器學習、深度學習的概念和區別還不是很了解,有可能你每天都能聽到這個概念,也經常提這個概念,但是你真的懂它們之間的關系嗎?那麽接下來就給大家從概念和
人工智慧,神經網路演算法,機器學習,深度學習三者關係
對於很多初入學習人工智慧的學習者來說,對人工智慧、機器學習、深度學習的概念和區別還不是很瞭解,有可能你每天都能聽到這個概念,也經常提這個概念,但是你真的懂它們之間的關係嗎?那麼接下來就給大家從概念和特點上進行闡述。先看下三者的關係。 人工智慧包括了機器學習和深度學習,機器學習包括了
人工智慧,機器學習和深度學習之間,主要有什麼差異?
如果你在科技領域,你經常會聽到人工智慧,機器學習,甚至是深度學習。怎樣才可以在正確的時間正確的使用這些詞?他們都是一樣的意思嗎?然而更多時候,人們總是混淆的使用它們。 人工智慧,機器學習和深度學習都是屬於一個領域的一個子集。但是人工智慧是機器學習的首要範疇。機器學習是深度學習的首要範疇。
機器學習,大資料,深度學習 競賽網站,學習網站,演算法刷題網站
資料競賽類網站 Kaggle 阿里巴巴天池大資料比賽 DataCastle CCF大資料與計算智慧大賽 DataFountain Di-Tech演算法大賽 KDD-Cup KDnuggets Competition 全國高校雲端計算應用創
人工智慧,機器學習與深度學習,到底是什麼關係
一、人工智慧 人工智慧(Artificial Intelligence),英文縮寫為AI。它是研究、開發用於模擬、延伸和擴充套件人的智慧的理論、方法、技術及應用系統的一門新的技術科學。 人工智慧是電腦科學的一個分支,它企圖瞭解智慧的實質,並生產出一種新的能以人類智慧相似的
機器學習,深度學習,免費資料集彙總
【第一波】 目前系統整理了一些網上開放的免費科研資料集,以下是分類列表以及下載地址,供高校和科研機構免費下載和使用。 金融 美國勞工部統計局官方釋出資料 上證A股日線資料,1999.12.09 至 2016.06.08,前復權,1095支股票 深證A股日線資料,1999
人工智慧,機器學習,深度學習的關係;智慧演算法
人工智慧: 是一個泛稱,包括自然學科和社會學科,以機器學習為基礎 機器學習: 是一門多領域交叉學科,涉及概
淺談數學、數學建模與人工智慧(機器學習,深度學習)之間的關係?
前言: 說來也巧合,我在大學裡加入的第一個社團就是數學建模,各種各樣的社團對我沒有完全沒有吸引力,什麼舞蹈、愛心、創業、英語等,加入數學建模的原因有二:一是可以參加比賽,二是可以認識更多