偶數位上都是偶數,要麼所有的奇數位上都是奇數


[編程題] 奇數位上都是奇數或者偶數位上都是偶數

      給定一個長度不小於2的數組arr。 寫一個函數調整arr,使arr中要麼所有的偶數位上都是偶數,要麼所有的奇數位上都是奇數上。 要求:如果數組長度爲N,時間複雜度請達到O(N),額外空間複雜度請達到O(1),下標0,2,4,6...算作偶數位,下標1,3,5,7...算作奇數位,例如[1,2,3,4]調整爲[2,1,4,3]即可 。

思路:類似於快排,只不過快排是i從最小下標開始每次+1,j從最大下標開始每次-1;本體可以設置odd,even,odd從下標1開始每次+2,even從下標0開始,每次+2;
循環的條件就是odd<len && even<len...

上代碼:
class Solution {
public:
    /**
     *  奇數位上都是奇數或者偶數位上都是偶數
     *  輸入:數組arr,長度大於2
     *  len:arr的長度
     *  將arr調整成奇數位上都是奇數或者偶數位上都是偶數
     */
    void oddInOddEvenInEven(vector<int>& arr, int len) {
 int odd = 1;
 int even = 0;
 int temp = 0;
 while (odd < len && even < len)
 {
  
  while (even < len && arr[even] %2 == 0)
   even += 2;
  while (odd < len && arr[odd] %2 == 1)
   odd += 2;
  if (odd < len && arr[odd] %2 == 0 && even < len && arr[even] %2 == 1)   
   {
    temp = arr[odd];
    arr[odd] = arr[even];
    arr[even] = temp;
   }
 }
    }
};

發佈了9 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章