目錄
題目描述
題解思路
代碼
題目描述
輸入一個整數陣列,實作一個函式來調整該陣列中數字的順序,使得所有奇數在陣列的前半部分,所有偶數在陣列的后半部分,
示例:
輸入:nums = [1,2,3,4]
輸出:[1,3,2,4]
注:[3,1,2,4] 也是正確的答案之一,
題解思路
初始化: i , j 雙指標,分別指向陣列 nums 左右兩端;
回圈交換: 當 i = j時跳出;
指標 ii 遇到奇數則執行 i = i + 1 跳過,直到找到偶數;
指標 jj 遇到偶數則執行 j = j - 1 跳過,直到找到奇數;
交換 nums[i] 和 nums[j] 值
代碼
class Solution {
public int[] exchange(int[] nums) {
int i=0;
int j=nums.length-1;
int temp;
while(i<j){//x&1 位運算 等價于 x \% 2 取余運算,即皆可用于判斷數字奇偶性,
while(i<j && (nums[i]&1)==1){i++;}//i碰到偶數停下,&運算子里面要打上括號
while(i<j && (nums[j]&1)==0){j--;}//j碰到奇數停下
//這里不寫i<j 陣列角標會越界
temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
return nums;
}
}
時間復雜度 O(N): N 為陣列 nums長度,雙指標i , j 共同遍歷整個陣列,
空間復雜度 O(1) : 雙指標 i, j 使用常數大小的額外空間,
執行用時:1 ms, 在所有 Java 提交中擊敗了100.00%的用戶
記憶體消耗:46.4 MB, 在所有 Java 提交中擊敗了43.47%的用戶
通過測驗用例:17 / 17
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/342033.html
標籤:其他
上一篇:力扣507完美數
