頭條面試題 統計有序陣列裡平方和的數目

2021-10-08 10:21:25 字數 955 閱讀 6448

給你乙個有序整數陣列,陣列中的數可以是正數、負數、零,請實現乙個函式,這個函式返回乙個整數:返回這個陣列所有數的平方值中有多少種不同的取值。舉例:

nums = ,

那麼你應該返回的是:1。因為這個陣列所有數的平方取值都是1,只有一種取值。

nums =

你應該返回4,因為nums陣列所有元素的平方值一共4種取值:1,0,4,9

方法1 暴力破解

直接計算每個數字的平方,然後和其他數字的數字的平方進行對比,並進行統計。時間複雜度為o(n

2)

o(n^2)

o(n2)。

方法2 雜湊表

使用雜湊表,一遍遍歷且計算每個樹的平方存檔到雜湊表裡面,最終統計雜湊表中元素的個數。時間複雜度o(n

)o(n)

o(n)

, 空間複雜度是o(n

)o(n)

o(n)

。方法3 雙指標夾逼

類似快速排序雙指標夾逼,左右指標交替移動

時間複雜度為o(n

)o(n)

o(n)

,空間複雜度為o(1

)o(1)

o(1)

。由於陣列是有序的,絕對值相等的情況主要有兩種情況,臨近元素相等,左右指標互為相反數。演算法過程主要是分為三種情況:

#include #include using namespace std;

int main(int argc, char *ar**) ;

int res = 0;

int left = 0;

int right = arr.size()-1;

while(leftabs(arr[right]))

if(abs(arr[left])==abs(arr[right]))

} if(left==right) res++;

cout<}

序陣列中不同平方值的個數 頭條面試題

題目 求解乙個有序陣列不同平方值的個數,這裡平方值只有0,1兩種情況,返回2 這裡拼房族有0,1,4,9共4中情況,返回4。要求 時間複雜度o n 空間複雜度o 1 分析 有序陣列普遍是利用雙指標問題求解 其次,map 或雜湊 二分 跟指定target類似,這裡的target 0.每次檢查頭尾指標的...

面試題3 有序陣列合併

初階 合併兩個有序陣列a和b,使得結果依然有序。高階 合併兩個有序陣列a和b,假設a有n個數,b有m個數,a陣列後面還有m個空餘空間,需要將結果儲存在a中。答 一種解答當然是把兩個陣列放在一起重新排序了。這樣的時間複雜度是o nlogn 沒有用到陣列已經有序的條件,所以顯然不是乙個期望的解答。那麼既...

校招面試題二維有序陣列查詢

給定乙個二維整型矩陣,已知矩陣的每一行都按照從小到大的順序排列,每一列也都按照從小到大的順序排列。現在給出乙個數,請寫乙個函式返回該數是否存在於矩陣中。矩陣 現的數字與需要查詢的數 k 都為0 100000之間的整數,且矩陣的大小在3000 3000以內。在保證正確性的基礎上,請盡量給出比較高效的解...