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

2020-12-24 酷扯兒

本文轉載自【微信公眾號:五角錢的程式設計師,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));

}

}

相關焦點

  • 所有的自然數不是奇數就是偶數對不對 自然數不是奇數就是偶數對嗎
    是對的,因為所有的偶數都可以被2整除,在自然數中除了偶數就是奇數,所以所有的自然數不是奇數就是偶數是正確的。  什麼是奇數  奇數指的是不能被2整除的數,數學表達形式為:2k+1。日常生活中,人們通常把正奇數叫做單數,它跟偶數是相對的奇數可以分為正奇數和負奇數。
  • 年初離職,學習半年源碼,終於拿到了螞蟻Offer,分享面試過程
    小夥伴從去年開始,一直叨叨要跳槽,大大小小的公司面試了很多,但總沒有拿到一個滿意的offer,要麼package太低,要麼就是面試被虐。經過前幾次的面試失利,終於明白了什麼叫基礎不牢,地動山搖。面試官隨便針對一個知識點深入考察一下,就回答不出來,就這樣,還怎麼能通過面試?不過,最近收到了小夥伴的捷報,已拿到阿里的offer,公司足夠大,base還可以,雖然是個P6,但還是隱隱感覺到他很滿意。其實,我還是有點疑惑,他之前的基礎很一般,咋就突然拿到了阿里的offer。
  • 任何4K+1素數的不定方程P=x^2+4yz總有奇數個解
    前面我們討論了費馬在1640年提出了數論中的一個定理:奇數可以表示為兩個平方數之和的充分必要條件是該質數被4除餘1,這就是數論中的費馬二平方定理,不能表示成兩個平方數之和的素數都是4K+3的形式,如下圖所示如果p是一個素數,則它必是奇數+偶數之和
  • C語言題目,求數組中偶數的個數和偶數的平均值
    1.求數組中偶數的個數和偶數的平均值。給一個含有10 個元素的數組賦值(正整數值),求此數組中偶數的個數和偶數的平均值。要求:(1)從鍵盤輸入 10 個正整數數值;(2)輸出偶數的個數和偶數的平均值【樣例輸入】Input numbers:3 5 7 6 8 80 23 46 1 12
  • 跟我學解Python題-奇偶數(取餘%的使用)
    哈哈,這裡算是一個無聊的玩笑吧~0算是偶數,歸為雙號#奇數和偶數首先,將變量num初始化為一個我們輸入的整數腳本:num=int(input("請輸入一個輸入想要判斷數字(整數)"))接著,偶數是可以被2整除的,即,偶數對二取餘的返回值為0腳本:num%2==0使用
  • 任何一個自然數不是奇數就是偶數對不對 任何一個自然數不是奇數就...
    「任何一個自然數不是奇數就是偶數」這個說法是正確的。因為自然數指的是非負整數,在非負整數的集合裡,一個數不是偶數就是奇數。  奇數是什麼  奇數指的是不能被2整除的整數 ,數學表達形式為:2k+1, 奇數可以分為正奇數和負奇數。兩個連續整數中必有一個奇數和一個偶數。
  • 奇數項和偶數項是不同的等比數列,如何求前n項和,這方法不錯
    高考數學複習,奇數項和偶數項是不同的等比數列,如何求前n項和,這方法不錯。這種數列的特點是:奇數項和偶數項是公比相同而首項不同的等比數列,下面所講的前n項和的求法也僅適用於這一種數列。如果公比不同,就不能使用這種方法,在以後的課程中會詳細講解。
  • Java 程式設計師必須掌握的 8 道數據結構面試題你會幾道?
    而另一些則隱含在面試題中,例如,「我們希望記錄每個作者相關的書籍數量。」即便是對於一些非常基礎的工作來說,學習數據結構也是必須的。那麼,就讓我們先從一些基本概念開始入手。什麼是數據結構?簡單地說,數據結構是以某種特定的布局方式存儲數據的容器。
  • 搞定HashMap面試,深入講解HashMap的工作原理
    HashMap常見的面試題帶著問題看源碼可能不那麼迷茫枯燥。當然還有很多面試題,但只要抓住關鍵的幾點,其他的也就迎刃而解,萬變不離其宗。前面我們說到hashtable是存儲hash值的數組。可知HahsMap最外層是一個數組。這個數組在源碼中的表示是Node<K,V>[] table。
  • 偶數薩攻略
    這張卡巨化快攻德也喜歡帶,首先我們自己的戰吼隨從很少,而且下隨從順序掌握在自己手中,4血前期被解掉的機率較小,可以卡住類似棄牌術、宇宙牧、奇蹟法等卡組前期很多戰吼隨從,屬於節奏卡
  • 跟我學解Python題-分離列表中的奇偶數
    在列表的末尾添加元素3、列表名.insert(索引值,元素) 在列表的指定索引位置插入元素4、len(列表名) 返回列表的長度,列表元素個數題1
  • 2020Web前端面試題匯總-開課吧
    js數組常用方法?push(),pop(),shift(),unshift(),splice(),sort(),reverse(),map()等。js事件代理在捕獲階段的實際應用?以上就是小科今天整理提供的Web前端開發面試題,希望為Web前端同學提供了有用的面試素材,以後小科每日均會提供Python、Web及MySQL資料庫相關的習題。學習沒有捷徑,希望大家都能少走一些彎路,順利找到工作!
  • 爐石狂野傳說—疊甲狂魔奇數戰
    選擇一套適合自己上分的卡組,與我們考試是一個道理(超級學霸除外),會做的題一定要保證得滿分,模稜兩可的題要儘可能得分,毫無頭緒的題直接放棄,節約時間去做更有意義的題,奇數戰就像是這樣的學生。
  • 15個近期JavaScript高頻手寫面試題
    作為前端開發工程師,JavaScript是我們技術能力中最重要的一環,最近結束了面試的高峰期,來給大家總結了一下最近比較高頻出現的15道JavaScript手寫面試題,一起來肝吧!
  • 從下面四張數字卡片中取出三張,按要求組成三位數:奇數,偶數等
    圖1奇數________________ 偶數________________ 2的倍數_____________ 5的倍數________則組成的三位數有:304,340,403,430取0,3,5,則組成的三位數有:305,350,503,530取0,4,5,則組成的三位數有:405,450,504,540取3,4,5,則組成的三位數有:345,354,435,453,534,543奇數的個位數字是
  • 五下數學奇偶數特性及其相關題解題思路
    ①奇數+奇數+奇數=?②奇數+偶數+奇數=?③奇數+偶數+偶數=?④偶數+偶數+偶數=?奇數×奇數=奇數,兩個都是奇數的因數中都不含2的倍數,所以它們的乘積也不是2的倍數,因此推斷兩個奇數的積應還是奇數。奇數×偶數=偶數,因數中其中一個是2的倍數,那麼乘積也一定是2的倍數,所以積是偶數。
  • java面試題(五題)
    TreeMap 可以保證順序,HashMap 不保證順序,即為無序的,Map 中可以將 Key 和 Value 單獨抽取出來KeySet()方法可以將所有的 keys 抽取成一個 SetValuesQueue(隊列)Queue 遵從先進先出原則使用時儘量避免 add()和 remove()方法,而是使用 offer()來添加元素,使用 poll()來移除元素優點是可以通過返回值來判斷是否成功