首試公司面試演算法題

2021-10-01 05:51:37 字數 1471 閱讀 3953

前幾天回家姐夫給我出了三道面試題(新手難度);
題目

1.給定乙個有序數列,求value在第一次出現的位置(資料重複度比較高)

第一反應就是二分查詢,然後再往前找一段。(被姐夫pass掉了,要我再優化一下);

題目不難,二分思想沒錯,在此基礎上我進一步二分,就行了(感覺自己演算法題白寫了,這都要想這麼久);
int

fun(vector<

int> arr,

int n)

}return last;

}

2.給定乙個無序數列,求第k大的數值

我的第一反應是用堆排序然後直接pop()k次就行了;(空間浪費時間浪費!!!)

int

quicksort

(vector<

int> arr,

int k,

int left,

int right)

swap

(&arr[i]

,&arr[left]);

if(ireturn

quicksort

(arr,k,i+

1,right)

;else

if(i>k)

return

quicksort

(arr,k,left,i-1)

;else

return arr[k]

;}

分析一下時間和空間複雜度;

第一種情況: 時間o(nlogn),空間o(n);

第二種情況: 時間o(nlogk),空間o(k);

第三種情況: 時間o(n),空間 o(n);

3.飛機加油問題:現有一架飛機要繞地球飛一圈,但是單次再油只夠其飛行1/4圈,問最少需要多少輛飛機同時同地起飛才能使一架飛機飛完一圈(假設飛機在飛行途中可以自由換油且無損耗)

當時想了挺久的,後來有了一點思路,2架飛機同時起飛可以讓1架飛機飛到1/8點處(其中一架滿油,另一架墜毀了);由此類推4架生2架,2架再前進1/8犧牲一架,由此答案是2^6架飛機就可以;

以上思路是有問題的,這樣不能保證所用的飛機最少,想一想也知道為什麼,其中很多油量的浪費;

其實自習想想也挺簡單的,只要保證油量浪費最少就行了,保證1架飛機供油,其他飛機一直處於滿油狀態,然後在3/4處有1架滿油的飛機就行了;

設有n架飛機同時起飛,第1架飛機墜落點在m處,則mn=1/4,m=1/4n;第2架飛機墜落點就在1/4(n-1)+1/4n……最後倒數第二架飛機墜落點在1/2+……+1/4*(n-1)+1/4n,這個值又要等於3/4;

**實現就很簡單了,最後求得是31架;

總結:這麼簡單的題都不會寫,寫題只會套模板,以後多練練思維,最後感謝姐夫,orz;

面試演算法題

前幾天,一好友去筆試,有一題 現在有1000個蘋果,和10個箱子,如何把這1000個蘋果裝在這10個箱子裡,才能使不管任何數量 1 1000 的蘋果,都能一次給出?當時,我們都想,出題這人。今天,在想移位的時候,突然想到了,這絕對是二進位制數的變種。分析 1000個蘋果,最接近1024,轉化為2進製...

面試演算法題

1 直方圖矩形最大值 class solution s.push i return res 2 第n個醜數 class solution return res.back 3 lru cache 最近最少使用頁面置換快取器 class lrucache int get int key void set...

某個面試演算法題

援引某人部落格 有乙個整數n,寫乙個函式f n 返回0到n之間出現的 1 的個數。比如f 13 6,現在f 1 1,問下乙個最大的f n n的n是什麼?writed by chszs public void fn int inputval 1000000 int cntforone 0 long c...