這是一道好未來的iOS面試題囱修。
今年三月份我面試了好未來的iOS開發(fā),當(dāng)時期望薪資是28K王悍,第一技術(shù)面過了破镰,第二技術(shù)面,主要是在路由和組件化這塊講的不明白压储,結(jié)果掛了鲜漩,有點小遺憾〖铮回想起來第一技術(shù)面有一個算法題孕似,我當(dāng)時雖然寫出來了,但面試官說有更好的方式實現(xiàn)刮刑。只是當(dāng)時我沒想起來喉祭,過后查了一下,果然有更好的方式實現(xiàn)雷绢,今天我來分享一下泛烙。
題目是這樣,有一個數(shù)組翘紊,請你找出這個數(shù)組最大的前兩位數(shù)蔽氨,且最大的數(shù)比第二大的數(shù)大9,如果沒有就提示不存在這樣的數(shù)帆疟。
當(dāng)時我想孵滞,這個很簡單嘛,不就是對數(shù)組進行降序排序鸯匹,然后取出數(shù)組第一和第二個數(shù)坊饶,最后比較大小,根據(jù)判斷輸出嗎殴蓬,于是我這樣寫了:
-(void)sortWithArray:(NSMultableArray *)arr{
for(int i = 0;i<arr.count;i++){
for(int j = i + 1; j <arr.count;j++){
if(arr[j] > arr[i]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
// 這里得到了一個降序數(shù)組
if(arr[0] - arr[1] > 10){
nslog(%ld,%ld,arr[0],arr[1]);
}else{
nlog("沒有這樣兩個數(shù)");
}
}
問題是:面試官說匿级,有更好的方式來實現(xiàn)蟋滴,譬如用一次循環(huán)實現(xiàn)。后來我回家后痘绎,思考了一會津函,怎么用一次循環(huán)來實現(xiàn)呢?想來想去還是沒想到孤页,于是我查了相關(guān)資料尔苦,真的佩服這種方式,果然一個循環(huán)就實現(xiàn)了行施,如下面代碼所示:
-(void)sortWithArray:(NSMultableArray *)arr{
//首先取出數(shù)組頭兩位數(shù)允坚,默認這個數(shù)組最少兩個元素
int max = arr[0]; int min = arr[1];
if(max < min){
max = arr[1];
min = arr[0];
}
for(int i = 2; i < arr.count ;i++){
if(arr[i] > max){
//把之前最大的置為第二大
min = max;
//重新設(shè)置最大數(shù)
max = arr[i];
}else{
//判斷之前第二大數(shù)跟當(dāng)前便利數(shù)對比
if(arr[i] > min){
min = arr[i];
}
}
//便利結(jié)束,最后所得的兩個數(shù)就是數(shù)組中最大的兩個數(shù)
if(max - min > 9){
nslog(@"最大兩個數(shù)分別為:%@蛾号,%@"稠项,max,min);
}else{
nslog(@"沒有這樣的數(shù)");
}
}
}
好了涂身,這就是如何使用一次便利的方式得到數(shù)組最大的兩個方式秃踩。
總結(jié):技術(shù)的學(xué)習(xí)遇汞,技能的提高是長期積累的過程誊酌,要想拿到高薪offer,持續(xù)積累拒啰,好好總結(jié)歧匈,月薪30k不是夢檀训,希望大家多多分享怒允,多多提建議埂软,謝謝。