21. 調整數組順序使奇數位於偶數前面(劍指 Offer 題解,面試)

2021-01-07 酷扯兒

本文轉載自【微信公眾號:五角錢的程式設計師,ID:xianglin965】經微信公眾號授權轉載,如需轉載與原文作者聯繫

21. 調整數組順序使奇數位於偶數前面

題目描述

需要保證奇數和奇數,偶數和偶數之間的相對位置不變,這和書本不太一樣。

解題思路

方法一:

創建一個新數組,時間複雜度 O(N),空間複雜度 O(N)。

package 劍指offer.調整數組順序使奇數位於偶數前面_21;/*

作者 :XiangLin

文件 :OrderArray.java

IDE :IntelliJ IDEA

*/

import java.util.Arrays;

public class OrderArray {

public int[] reOrderArray(int[] nums){

//奇數個數

int oddCnt = 0;

for(int x: nums){

if (!isEven(x)){

oddCnt++;

}

}

int[] copy = nums.clone();

int i = 0, j = oddCnt;

for (int num : copy){

if (num % 2 == 1)

nums[i++] = num;

else

nums[j++] = num;

}

return nums;

}

private boolean isEven(int x){

return x % 2 == 0;

}

public static void main(String[] args) {

int nums[] = {1,2,3,4,5};

OrderArray o = new OrderArray();

int[] data = o.reOrderArray(nums);

System.out.println(Arrays.toString(data));

}

}

方法二:

使用冒泡思想,每次都將當前偶數上浮到當前最右邊。時間複雜度 O(N2),空間複雜度 O(1),時間換空間。

package 劍指offer.調整數組順序使奇數位於偶數前面_21;/*

作者 :XiangLin

文件 :OrderArray2.java

IDE :IntelliJ IDEA

*/

import java.util.Arrays;

public class OrderArray2 {

public int[] reOrderArray(int[] nums){

int N = nums.length;

for (int i = N - 1; i > 0; i --){

for (int j = 0; j < i; j++){

if (isEven(nums[i]) && !isEven(nums[j + 1])){

swap(nums,j,j+1);

}

}

}

return nums;

}

private boolean isEven(int x){

return x % 2 == 0;

}

private void swap(int[] nums, int i ,int j){

int t = nums[i];

nums[i] = nums[j];

nums[j] = t;

}

public static void main(String[] args) {

int nums[] = {1,2,3,4,5};

OrderArray2 o = new OrderArray2();

int[] data = o.reOrderArray(nums);

System.out.println(Arrays.toString(data));

}

}

相關焦點

  • 劍指offer python實現 66道算法題
    1.二維數組中的查找題目:在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。13.調整數組順序使奇數位於偶數前面題目:輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。
  • 劍指 Offer 58 - I. 翻轉單詞順序 - leetcode 劍指offer系列
    題目難度: 簡單原題連結[1]今天繼續更新劍指 offer 系列, 老樣子晚上 6 點 45 分準時更新公眾號 每日精選算法題, 大家記得關注哦~ 另外在公眾號裡回復 offer 就能看到劍指 offer 系列當前連載的所有文章了題目描述輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。
  • 五年級|奧數知識點:奇數與偶數及奇偶性的應用
    利用奇數與偶數的這些性質,我們可以巧妙地解決許多實際問題.例1:1+2+3+…+1993的和是奇數?還是偶數?分析:此題可以利用高斯求和公式直接求出和,再判別和是奇數,還是偶數.但是如果從加數的奇、偶個數考慮,利用奇偶數的性質,同樣可以判斷和的奇偶性.此題可以有兩種解法。
  • 小學五年級奧數練習題:奇數偶數問題一
    小學五年級奧數練習題:奇數偶數問題一   練習題:2,4,6,8,…是連續的偶數,若五個連續的偶數的和是320,這五個數中最小的一個是()。   答案與解析:   考點:奇偶性問題.   分析:若五個連續的偶數的和是320,即那麼五個數中間的那個數應是這五個數的平均數,320÷5=64,所以這五個數是60、62、64、66、68.   解:五個連續的偶數的和是320,則:   小學五年級奧數題及答案奇數偶數:這五個連續偶數的第三個(即中間的那一個)偶數是320÷5=64.
  • 【數學】為什麼奇數加奇數等於偶數,奇數加偶數等於奇數?
    題外話:這篇文章的標題,我一開始寫成了「奇數加偶數等於偶數」,我編輯的時候被娃看見了,他立刻指出了我的錯誤,今晚給你加雞腿!
  • 奇數與奇數的積是奇數還是偶數,奇數與偶數的積是奇數還是偶數
    奇數與偶數的積是奇數還是偶數?偶數與偶數的積呢?普通學生思路:奇數的個位數字是1,3,5,7,9;奇數與奇數相乘,先算個位數字與個位數字相乘,它們相乘的積的個位數字就是奇數與奇數相乘的積的個位數字。附證明(涉及初中知識):設奇數為2n+1(n是自然數),當兩個奇數相等時,它們的積是(2n+1)(2n+1)=4n^2+4n+1,顯然4n^2是偶數,4n也是偶數,1是奇數,而偶數+偶數=偶數,偶數+1=奇數,所以奇數與奇數的積是奇數;當兩個奇數不相等時,設一個為2n+1,一個為2m+1(n≠m,m也是自然數),它們的積是(2n+1)
  • 五年級思維訓練:奇數和偶數的應用,趣味練習題(轉發、收藏)
    前面我已經關於奇數和偶數方面的內容做過一次介紹,今天主要對於貼緊生活方面的奇偶性問題做一介紹。每人只要接到對方賀年卡就一定回贈賀年卡,那麼送了奇數張賀年卡的人的個數是奇數,還是偶數?為什麼?解析:此題初看似乎缺總人數。但解決問題的實質在送賀年卡的張數的奇偶性上,因此與總人數無關。一邊觀察思維示意圖一邊來理解,剛開始在學習這種內容的時候我很難理解。
  • 你面試中,遇到的php數組的面試題,快收藏
    網上找的PHP數組題,準備自己做一遍並且記錄下來。不斷添加中。<?( 斐波那契數列,又稱黃金分割數列,指的是這樣一個數列:1、1、2、3、5、8、13、21、……在數學上,斐波納契數列以如下被以遞歸的方法定義:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*). 特別指出:第0項是0,第1項是第一個1。)<?
  • 一年級數學,奇數與偶數的應用題
    根據題目意思,2支百合總價是偶數,2支玫瑰總價是偶數,4支康乃馨總價是偶數,所以買花的總價應該是偶數,她付了45元,是奇數,所以小紅說的對,阿姨算錯帳了。我們知道奇數加奇數結果是偶數,9個小朋友分得的糖塊數就是4個偶數加1個奇數,那麼結果還是奇數,而糖塊的總數為雙數,所以不可以分給9個小朋友,並且都是奇數。例題5:你知道1,2,3,4,5…..11的和是奇數還是偶數?
  • 奇數和偶數,帶你讀《漢聲數學》
    《奇數和偶數》導讀;2. 奇數和偶數概念解讀;3. 如何啟蒙奇數和偶數。《奇數和偶數》導讀今天的文章導讀《漢聲數學》的第2本《奇數和偶數》。書中講述的順序是:奇數和偶數的概念、偶數和奇數在具體場景下的重要性、體驗奇數和偶數、討論2個數相加結果的奇偶性、身體部位各器官數目的奇偶性。先引出奇數和偶數的概念:有些雙數是偶數;有些單數是奇數。以鞋的配對來展示,6隻鞋中的每隻鞋都能配上對,所以6是雙數,即偶數。右邊的5隻鞋中有一隻湊不成對,所以5是單數,即奇數。
  • 專題訓練——奇數與偶數
    1.任意3個整數中,至少有兩個整數之和是偶數,這是為什麼?   2.某班同學參加學校的數學競賽,共30道試題.評分標準是:答對一題給3分,答錯倒扣1分,不答給1分.請你說明:該班同學得分總和一定是偶數.   3.兩個質數之和是999,求這兩個質數之積.
  • ​LeetCode刷題實戰152:乘積最大子數組
    算法的重要性,我就不多說了吧,想去大廠,就必須要經過基礎知識和業務邏輯面試+算法面試。
  • 什麼樣的數列要分奇數項和偶數項才能求解?題中給的已知就是提示
    但是我們通常在計算an的通項公式時,一般已知中只會給出首項a1的值,但是這道題中不僅給出了首項a1的值,也給出了第二項a2的值。那這道題為什麼多給出第二項a2的值呢?其實這道題再給我們提示:由na(n+2)-(n+2)an=λ(n^2+2n)變形出來的應該是兩個數列。
  • 偶數 奇數 質數 合數
    二、偶數奇數偶數--2的倍數:2、4、6、8、10,…奇數--不是2的倍數 1,3,5,7,9…分類:1,2,3,4,5,6,7,8,9等這些數不是偶數便是奇數,所以偶數和奇數便組成了非0自然數。任何一個非0自然數都有一種身份,那就是偶數或者奇數。
  • 質數就是奇數?合數就是偶數?
    什麼是偶數?整數內,能被2整除的數,叫偶數。例如8,8÷2=4,得到整數商4,所以8是偶數。什麼是奇數?整數內,不能被2整除的叫奇數。例如7,7÷2=3……1,得到商3還有餘數1,不能整除,所以7是奇數。什麼是質數?只有1和它本身的數叫質數。例如2,2的因數只有兩個:1和2,沒有其他的因數,所以2是質數。
  • LeetCode算法題:尋找兩個有序數組的中位數
    LeetCode算法題:尋找兩個有序數組的中位數題目描述:給定兩個大小為 m 和 n 的有序數組 nums1 和 nums2。那麼回顧一下中位數的定義:如果某個有序數組長度是奇數,那麼其中位數就是最中間那個,如果是偶數,那麼就是最中間兩個數字的平均值。
  • 刷題無從下手?那麼就從這道簡單題開始吧
    面試題 10.11.
  • 奇數與偶數概念的應用:一個遊戲問題
    奇數與偶數是小學數學的兩個基本概念,理解也很容易。奇數指不成雙的數,如1、3、5、7等;偶數指成雙的數,如2、4、6、8等。下面的趣味問題是本人受兒童遊戲泡泡龍的啟發改編的,問題的解決只需要用到奇數和偶數的概念。
  • Leetcode刷題-排序
    排序數組難度:中等給你一個整數數組 nums,請你將該數組升序排列。按奇偶排序數組 II難度:簡單給定一個非負整數數組 A, A 中一半整數是奇數,一半整數是偶數。對數組進行排序,以便當 A[i] 為奇數時,i 也是奇數;當 A[i] 為偶數時, i 也是偶數。