人人網2014筆試演算法題彙總

2021-08-27 15:00:09 字數 1505 閱讀 3564

1.給出乙個有序陣列啊,長度為len,另外給出第三個數x,問是否能在陣列中找到兩個數,這兩個數之和等於第三個數x。

我們首先看到第一句話,這個陣列是有序的,所以,我們可以定義兩個指標,乙個指向陣列的第乙個元素,另乙個指向應該指向的位置(這個需要看具體的實現和陣列給定的值),首先計算兩個位置的和是否等於給定的第三個數,如果等於則演算法結束,如果大於,則尾指標向頭指標方向移動,如果小於,則頭指標向尾指標方向移動,當頭指標大於等於尾指標時演算法結束,沒有找到這樣的兩個數。

解法一:

#include int judge(int *a, int len, int k, int *num1, int *num2);  

int main(int argc, char **argv)

; int result = -1;

int num1, num2;

result = judge(test_array, sizeof(test_array) / sizeof(int), 12, &num1, &num2);

if(result == 0)

else if(result == -1)

else

}

int judge(int *a, int len, int k, int *num1, int *num2)

if(a[0] >= k)

while(a[i] <= k && i < len)

low = a;

high = a + i - 1;

while(low < high)

else if((*low + *high) > k)

else if((*low + *high) < k)

} return result;

}

解法二:

#include using namespace std;

int hash_table[100];

bool judge(int *a, int len, int x)

{ memset(hash_table, 0, sizeof(hash_table));

for (int i=0; i本題解決方法:hash table。

時間複雜度:o(n)

空間複雜度:o(n)

2.給定有n個數的陣列a,其中有超過一半的數為乙個定值,在不進行排序,不開設額外陣列的情況下,以最高效的演算法找出這個數。

int find(int* a, int n);

#include using namespace std;

int find(int *a, int n)

{ int t = a[0];

int count = 0;

for (int i=0; i

time complexity: o(n)

space complexity:o(1)

美團網2014筆試演算法題彙總

1.鍊錶翻轉。給出乙個鍊錶和乙個數k,比如鍊錶1 2 3 4 5 6,k 2,則翻轉後2 1 4 3 6 5,若k 3,翻轉後3 2 1 6 5 4,若k 4,翻轉後4 3 2 1 5 6,用程式實現。include using namespace std struct listnode listn...

暴風影音2014筆試演算法題彙總

1.自定義實現字串轉為整數的演算法,例如把 123456 轉成整數123456.輸入中可能存在符號,和數字 返回結果的有效標誌 enum status int gstatus valid int strtoint const char str while digit 0 digit 非法輸入 els...

阿里巴巴2014筆試演算法題彙總

1.兩棵二叉樹t1和t2,t1的節點數是百萬量級,t2的節點數一千以內,請給出判斷t2是否t1子樹的可行演算法。分析 首先想到的是遞迴,但是t1的數量級太大,遞迴會導致棧溢位,於是以非遞迴實現。bool issubtree binarytreenode proot1,binarytreenode p...