網上看到的騰訊面試筆試題部分解析

2021-06-21 20:14:38 字數 1594 閱讀 4103

1、給乙個無重複整數陣列, 找到其中包含最多連續數的子集,比如給:15, 7, 12, 6, 14, 13, 9, 11,則返回: [11, 12, 13, 14, 15] 。

2、 倒轉乙個字串,要求要在原字串上執行,並且效率最高,如輸入"abc",輸出「cba」,輸入"abcd",輸出"dcba"。

3、給定乙個整數,求出其中0出現的次數。不允許將數字轉化為字串。如輸入2006,則輸出2。

4、現在硬碟裡有幾十億條qq的號碼,如何得出每乙個qq號碼重複的次數,假設計算機執行記憶體是有限的。

下面給出我自己的解答,當然了,由於對c語言比較生疏了,所以用js代為實現,大家明白實現原理即可。

解答1:

// 說明:我對於該題的解答事件複雜度組合要取決於排序的時間複雜度(一般最快的為o(nlogn)),該題目還有一種時間複雜度為o(n)的演算法,但是要用到一種叫做並查集的資料結構,而且它占用記憶體較多,屬於以空間換時間的一種演算法。另外這裡我只獲取了乙個最長的子串行情況,但是要考慮有多個最長子序列的情況,當然也比較容易在下面的程式上擴充套件實現。

function getmaxsublist(ary)

var len = ary.length;

if(len <= 1)

ary.sort(function(a,b));// 公升序排序

ary[len++] = infinity;

var start = -1,nstart,

count = 1,ncount = 0;

var i = 1;

for(;i解答2:

//這個比較簡單,知道實現思想即可。時間複雜度:o(n/2)

function reversestr(str)

return strary.join("");

}console.log(reversestr("abcd"));

解答3:

function getzeronum(num)

var i = 100;

var count = 0;

while(num%i !== num)

if(num%i - num%(i/10) === 0)

i *= 10;

}return count;

}console.log(getzeronum(1020));

解答4:

這是乙個典型的大資料處理問題。我們可以先對所有資料進行排序,然後遍歷一遍記錄每個qq號出現的次數即可得出結果。由於資料量較大,把所有的資料放入到記憶體裡去實現的話是不現實的。那這裡就用到了一種很典型的不在記憶體裡排序的方法,即」外部排序「,即在計算機外部儲存(如硬碟、磁帶等)裡排序。那如何排呢?就用到了外部排序實現的一種經典排序演算法:歸併排序(當然內部排序也可以用,其優勢一般體現在資料量較大的情況下)。歸併排序的實現思想就是二分,然後對每乙個子集進行排序後再合併兩個子集,這樣的話只要我們實現了乙個合併兩個已經排好序的子集的方法之後我們就可以用遞迴的思想去實現遞迴排序。我用js實現了一下:

// 陣列ary從p到q是有順序的,從q到r是有順序的

function merge(ary,p,q,r)

for(i = q+1;i

我的部分面試筆試題 C語言

volatile 表示乙個變數也許會被後台程式改變,關鍵字 volatile 是與 const 絕對對立的。它指示乙個變數也許會被某種方式修改,這種方式按照正常程式流程分析是無法預知的 例如,乙個變數也許會被乙個中斷服務程式所修改 這個關鍵字使用下列語法定義 volatile data defini...

C C 常見的面試筆試題

1 程序的記憶體空間的劃分為那些段,各儲存什麼資料?劃分的段 儲存的資料 test 段 儲存二進位制指令 常量 data資料段 儲存初始化的全域性變數和被static修飾的區域性變數 bss 靜態資料段 儲存未初始化的全域性變數和被static修飾的區域性變數 stack 棧 儲存區域性變數 塊變數...

python常見的面試筆試題

a 12,13,3,56,35,33 for i in range len a for j in range len a i 1 if a j a j 1 a j a j 1 a j 1 a j for i in range 1,10 for j in range 1,i 1 print s s s...