三道面試題

2021-08-26 03:11:36 字數 1267 閱讀 2024

一、給定乙個n個整數元素的陣列,元素分別為a1, a2, a3....an,每個元素分別對應乙個權重w1(小於1的float), w2,w3....wn,其和為1,找出其中乙個元素ak,使所有小於ak的元素的權重之和小於1/2,所有大於ak的元素的權重之和》=1/2。

思路:首先將該陣列按元素值的大小進行公升序排列,同樣的那個權值陣列也要對應的進行排序,因為原先的那個陣列的下標和權值陣列的下標是相對應的,如果權值陣列不跟著變化的,那麼就無法知道某乙個數的權值是多少了,就無法對應起來了。。

核心**如下:

sum = w[1];//小於ak的元素的權重之和

for(k=2;k<=n;k++)

二、給定乙個n個元素的整數,元素分別為a1,a2,a3....an,將陣列變為a1a3

首先用nth_element把陣列劃分,以中位數為分界點,所有小於中位數(x)的元素在x之前,大於x的元素在x之後。

然後從兩頭分別取乙個小於x的數,大小x的數,儲存到另一陣列中。

nth_element的時間複雜度是o(n)的。

例如:

原陣列 1 5 3 7 4 2 6

nth_後 1 3 2 4 7 6 5 (只保證4在中間,前三個不一定有序,但都比4小)

新陣列 1 7 3 6 2 5 4

**如下:

#include "iostream"

#include "algorithm"

using namespace std;

int main(void)

; int b[100];

int size = sizeof( a ) / sizeof( a[0] );

int mid = size / 2;

nth_element( a, a+mid, a+size );

int index1, index2, index3 = 0;

for( index1 = 0, index2 = mid+1; index1 < mid; ++index1, ++index2 )

b[index3] = a[mid];

for( int i1 = 0; i1 < size; ++i1 )

system("pause");

return 0;

}

三、10個人去看電影,其中5個人每人只有5元的鈔票,另外5個人每個人只有10元的鈔票,電影票的票價是5元,現在10個人排隊去買票,問有多少種排列的方法,使得每個人在買票的時候售票員都有錢找。

第三道面試題

上次我解釋了第一道面試題。現在再來看看第三道。有一種數字,正過來和倒過來讀是一樣的,如123454321,99877899。我不知道中文叫什麼,戰且稱之為回文數字。現給定乙個數值,求小於此數值的最大回文數字,並能被30之內的素數整除。我的分析如下。要求最大的回文數字,要把數字分一半,前一半減一,在把...

每天三道面試題2019 09 19

http1.0執行在tcp協議上,http1.1執行在ssl tls上,而ssl tls執行在tcp上,http2.0執行在spdy ssl上,而spdy ssl有執行在tcp上。http1.0是無狀態的短連線,每一次請求都需要經過三次握手建立連線後才能進行傳輸 http1.0支援長連線,避免了每次...

雅虎三道面試題 答案

雅虎三道面試題 34 程式設計實現 把十進位制數 long 型 分別以二進位制和十六進製制形式輸出,不能使用 printf 系列 35 程式設計實現 找出兩個字串中最大公共子字串,如 abccade dgcadde 的最大子串為 cad 36 有雙向迴圈鍊錶結點定義為 struct node 有兩個...