乙個百度的面試題 分開正負數並保持其相對位置不變

2021-06-11 07:40:57 字數 896 閱讀 8374

這個題是別人問的,在開始也太看清題目,感覺像acm的題,這很好實現嘛,用快排的思想,但是一想不行呀,要保持相對位置不變,於是想到在定義乙個陣列,但是這樣空間複雜度又變了,要是用其他的方法的話時間複雜度最少也是o(n2)。於是我仔細的分析了下這個題:

要是陣列的話,就必須移動相對元素,時間複雜度肯定要上去,在定義乙個陣列還不行,所以這時候能讓我考慮到的就只有儲存結構改變一下了,如果用鍊錶的話 就可以了,因為鍊錶改變元素位置,並不需要移動其他元素只需要將指標改下,這樣時間複雜度就下來了。顯然這種方法是可以的。如果真是這樣,這個面試題考的就沒有生命技術含量,只要考察人分析問題的能力。

後來我仔細看了乙個其實不用陣列也完全可以實現,想通了其實很簡單:就是將第乙個負數插到第乙個整數的前面,只要把第乙個整數和第乙個負數之間的元素向後移動乙個位置,然後將第乙個負數加入到原來第乙個整數的位置,然後就可以了,只要遍歷一次,**如下:

if(a[i]>0&& plus<0)

}if(minus>=0&& plus>=0)//都找到之後進行交換

a[plus]=tmp;

minus=-1;}}

}/*************測試用例****************/

int main(void)

, len, i;

len = sizeof(a)/sizeof(int);

for(i = 0; i < len; i++)

printf("%d ", a[i]);

printf("\n");

insertsort(a , len);

for(i = 0; i < len; i++)

printf("%d ", a[i]);

printf("\n");

return 0;

}

乙個百度的面試題目

題目 乙個陣列中有2個數只出現了一次,其他的數都出現了兩次,寫乙個演算法找出這兩個只出現一次的數 分析 該題目可以通過異或完成,先讓我舉乙個例子 4 0100 5 0101 1 0001 5 0101 4 0100 上面的例子說明4 5 5 4 同理4 5 4 5 int find first 1 ...

乙個百度的面試題目

題目 乙個陣列中有2個數只出現了一次,其他的數都出現了兩次,寫乙個演算法找出這兩個只出現一次的數 分析 該題目可以通過異或完成,先讓我舉乙個例子 4 0100 5 0101 1 0001 5 0101 4 0100 上面的例子說明4 5 5 4 同理4 5 4 5 int find first 1 ...

百度面試題的乙個完整思路

為分析使用者行為,系統常需儲存使用者的一些query,但因query非常多,故系統不能全存,設系統每天只存m個query,現設計乙個演算法,對使用者請求的query進行隨機選擇m個,請給乙個方案,使得每個query被抽中的概率相等,並分析之,注意 不到最後一刻,並不知使用者的總請求量。做法 1 如果...