Lintcode 144 交錯正負數

2021-09-24 05:18:36 字數 1087 閱讀 6162

給出乙個含有正整數和負整數的陣列,重新排列成乙個正負數交錯的陣列。

給出陣列[-1, -2, -3, 4, 5, 6],重新排序之後,變成[-1, 5, -2, 4, -3, 6]或者其他任何滿足要求的答案

完成題目,且不消耗額外的空間。

不需要保持正整數或者負整數原來的順序。

這道題目比較難,使用o(n)的演算法來做的時候使用雙指標,奇數偶數指標交替向後走的方法。

注意,題目輸入保證了當n為偶數的時候,正數和負數個數是完全相同的。

當n為奇數的時候,正數個數只會比負數個數多1

所以這裡要特別處理正數和負數個數的情況

時間複雜度為o(n), 空間複雜度o(n)。 不改變陣列的順序

class solution 

int i=0,j=0,k=0;

// 如果正數個數大於負數的情況

if(postive.size()>nagetive.size())

while(i!=postive.size()) a[k++] = postive[i++];

}// 如果負數個數大於正數的情況

else

while(j!=nagetive.size())a[k++] = nagetive[j++];}}

};

雙指標做法

注意同樣要判斷兩種情況, 時間複雜度為o(n), 這個做法會改變

class solution 

if(posnum>=negnum)

else if(i%2==1 && a[i]>0)}}

else

else if(i%2==1 && a[i]<0)

if(posnum>=negnum)

a[i] = temp;

}else if(i%2==1 && a[i]>0)

a[i] = temp;}}

}else

a[i] = temp;

}else if(i%2==1 && a[i]<0)

a[i] = temp;}}

}}

};

lintcode 144 交錯正負數

給出乙個含有正整數和負整數的陣列,重新排列成乙個正負數交錯的陣列。注意事項 不需要保持正整數或者負整數原來的順序。樣例給出陣列 1,2,3,4,5,6 重新排序之後,變成 1,5,2,4,3,6 或者其他任何滿足要求的答案 挑戰原地完成,沒有額外的空間 標籤兩根指標 思路 要實現正負交錯的陣列,原陣...

14 4 選單功能

選單功能就是與使用者的溝通介面。1 在workermanager.h標頭檔案中新增show menu 成員函式。class workermanager 2 在workermanager.cpp中實現show menu 成員函式。其實這個函式就是在螢幕中把選單介面列印出來,沒什麼技術含量。顯示選單 v...

14 4 執行緒的通訊

執行緒通訊 乙個執行緒完成自己的任務時,就要通知另外乙個執行緒去 例子就是生產者與消費者關係 wait 等待。如果執行緒執行了wait方法,那麼該執行緒會進入等待的狀態 notify 喚醒等待的執行緒 注意 1 wait和notify方法是屬於objeck類的。2 wait和notify方法必須是要...