劍指offer習題集

2022-01-15 12:18:42 字數 3582 閱讀 5471

1.過載賦值運算子函式:(具體見**)

//

普通做法

cmystring& cmystring::operator=(const cmystring&str)

//更加安全的做法,普通做法在new記憶體不足情況下,已經將原值delete

cmystring& cmystring::operator=(const cmystring&str)

return *this

;}

2.替換字串中的空白字元

瞎了,做了一遍結果還是出錯。。。確實要多練練

class

solution

n_strlength=n_str+n_blank*2

;

if(n_strlength>length) return

;

int n1=n_str,n2=n_strlength;

while(n1>=0&&n2>n1)

else

--n1;

} }

};

3.使用兩個棧模仿佇列

class

solution

intpop()

}if(stack2.size()<=0

)

return0;

temp=stack2.top();

stack2.pop();

return

temp;

}private

: stack

stack1;

stack

stack2;

};

4.改進的斐波那契數列

class

solution

return

n3; }

};

5.實數的整數次方

class

solution

//針對0次方做的特殊處理

if(0==exponent) return

1.0;

else

if(1==exponent) return

base

;

double

res;

bool sign=exponent<0?true:false

;

if(sign)

else

}bool equal(const

double &a,const

double &b)

double powerd(double

base,int

exponent)

return

res;

}};

6.求鍊錶的倒數第k個節點

/*

struct listnode

};*/

class

solution

if(i!=0) return

null;

while(t1!=null)

return

t2; }

};

7.包含min函式的棧

class

solution

else

}void

pop()

}inttop()

intmin()

private

: stack

m_data;

stack

m_min;

};

8.給定乙個陣列a[0,1,...,n-1],請構建乙個陣列b[0,1,...,n-1],其中b中的元素b[i]=a[0]*a[1]*...*a[i-1]*a[i+1]*...*a[n-1]。不能使用除法。

vector multiply(const vector&a) 

for(i=len-2;i>=0;i--)

return

res;

}

此題沒怎麼注意**的魯棒性,後續可以補充。

9.乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。

listnode* entrynodeofloop(listnode*phead)

//尋找鍊錶中環的入口節點

p1=phead;p2=phead;

for(i=0;i)

while(p1!=p2)

return

p1; }

listnode* meetlistnode(listnode*phead)

else

}return

p1; }

這道題有更加快捷優化的做法,後續做更新。這裡只是將書本上的思路進行闡述。

10.在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。

陣列中某些數字是重複的,但不知道有幾個數字是重複的。

也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。

例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。

bool duplicate(int numbers, int length, int*duplication) 

for(i=0;i)

//進行數值交換

temp=numbers[i];

numbers[i]=numbers[temp];

numbers[temp]=temp;

} }

return

false

; }

這道題還是比較繞,不能熟練掌握。

11.第乙個只出現一次的字元

此題其實比較簡單,但是要知道ascii碼共有256個。其實不知道也無妨,將hashtable設定較大即可。

期望於乙個迴圈解決問題,是可以的,但是在面試的過程中,最重要的是解決題目,進而進行優化。

class

solution

const

int size=256

; unsigned

int i,hashtable[size]=;

for(i=0;ii)

for(i=0;ii)

return -1

; }

};

12.陣列中只出現一次的數字

此題可以擴充套件範圍,比如字元之類的,總之方法如果不是看書,蠻難想到的

class

solution

int i,n=0,temp=data[0

],res;

for(i=1;i)

//尋找二進位制中初始為1數字

while(!(temp&0x01)&&(n<8*sizeof(int

)))

*num1=0;*num2=0

;

for(i=0;ii)

else

}return

; }

};

劍指offer習題集

一 二維陣列的查詢 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。思路 從左下角元素往上查詢,右邊元素是比這個元素大,上邊是的元素比這個元素小。於是,tar...

劍指Offer習題

1.二維陣列中的查詢 題目 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。bool find int target,vector array else re...

劍指Offer習題3 4

思路 一 陣列查詢 折半 二分 查詢 int binsearch int arr,int len,int key else if arr mid key else return mid bool search int arr 4 int key len int newlen len count 2 ...