1.過載賦值運算子函式:(具體見**)
//普通做法
cmystring& cmystring::operator=(const cmystring&str)
//更加安全的做法,普通做法在new記憶體不足情況下,已經將原值delete
cmystring& cmystring::operator=(const cmystring&str)
return *this
;}
2.替換字串中的空白字元
瞎了,做了一遍結果還是出錯。。。確實要多練練
classsolution
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.使用兩個棧模仿佇列
classsolution
intpop()
}if(stack2.size()<=0
)
return0;
temp=stack2.top();
stack2.pop();
return
temp;
}private
: stack
stack1;
stack
stack2;
};
4.改進的斐波那契數列
classsolution
return
n3; }
};
5.實數的整數次方
classsolution
//針對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函式的棧
classsolution
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設定較大即可。
期望於乙個迴圈解決問題,是可以的,但是在面試的過程中,最重要的是解決題目,進而進行優化。
classsolution
const
int size=256
; unsigned
int i,hashtable[size]=;
for(i=0;ii)
for(i=0;ii)
return -1
; }
};
12.陣列中只出現一次的數字
此題可以擴充套件範圍,比如字元之類的,總之方法如果不是看書,蠻難想到的
classsolution
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 ...