Welcome to Subscribe On Youtube
  • /**
    
     Given an array A of non-negative integers, half of the integers in A are odd, and half of the integers are even.
    
     Sort the array so that whenever A[i] is odd, i is odd; and whenever A[i] is even, i is even.
    
     You may return any answer array that satisfies this condition.
    
    
    
     Example 1:
    
     Input: [4,2,5,7]
     Output: [4,5,2,7]
     Explanation: [4,7,2,5], [2,5,4,7], [2,7,4,5] would also have been accepted.
    
    
     Note:
    
     2 <= A.length <= 20000
     A.length % 2 == 0
     0 <= A[i] <= 1000
    
     */
    public class Sort_Array_By_Parity_II {
        class Solution {
            public int[] sortArrayByParityII(int[] A) {
                int j = 1;
                for (int i = 0; i < A.length; i += 2)
                    if (A[i] % 2 == 1) {
    
                        // find next odd-value index
                        while (A[j] % 2 == 1) {
                            j += 2;
                        }
    
                        // Swap A[i] and A[j]
                        int tmp = A[i];
                        A[i] = A[j];
                        A[j] = tmp;
                    }
    
                return A;
            }
        } }
    
    ############
    
    class Solution {
        public int[] sortArrayByParityII(int[] nums) {
            for (int i = 0, j = 1; i < nums.length; i += 2) {
                if ((nums[i] & 1) == 1) {
                    while ((nums[j] & 1) == 1) {
                        j += 2;
                    }
                    int t = nums[i];
                    nums[i] = nums[j];
                    nums[j] = t;
                }
            }
            return nums;
        }
    }
    
  • // OJ: https://leetcode.com/problems/sort-array-by-parity-ii/
    // Time: O(N)
    // Space: O(1)
    class Solution {
    public:
        vector<int> sortArrayByParityII(vector<int>& A) {
            for (int i = 0, j = 1, N = A.size(); i < N && j < N; i += 2, j += 2) {
                while (i < N && A[i] % 2 == 0) i += 2;
                while (j < N && A[j] % 2 != 0) j += 2;
                if (i < N) swap(A[i], A[j]);
            }
            return A;
        }
    };
    
  • class Solution:
        def sortArrayByParityII(self, nums: List[int]) -> List[int]:
            n, j = len(nums), 1
            for i in range(0, n, 2):
                if (nums[i] & 1) == 1:
                    while (nums[j] & 1) == 1:
                        j += 2
                    nums[i], nums[j] = nums[j], nums[i]
            return nums
    
    ############
    
    class Solution(object):
        def sortArrayByParityII(self, A):
            """
            :type A: List[int]
            :rtype: List[int]
            """
            odd = [x for x in A if x % 2 == 1]
            even = [x for x in A if x % 2 == 0]
            res = []
            iseven = True
            while odd or even:
                if iseven:
                    res.append(even.pop())
                else:
                    res.append(odd.pop())
                iseven = not iseven
            return res
    
  • func sortArrayByParityII(nums []int) []int {
    	for i, j := 0, 1; i < len(nums); i += 2 {
    		if (nums[i] & 1) == 1 {
    			for (nums[j] & 1) == 1 {
    				j += 2
    			}
    			nums[i], nums[j] = nums[j], nums[i]
    		}
    	}
    	return nums
    }
    
  • /**
     * @param {number[]} nums
     * @return {number[]}
     */
    var sortArrayByParityII = function (nums) {
        for (let i = 0, j = 1; i < nums.length; i += 2) {
            if ((nums[i] & 1) == 1) {
                while ((nums[j] & 1) == 1) {
                    j += 2;
                }
                [nums[i], nums[j]] = [nums[j], nums[i]];
            }
        }
        return nums;
    };
    
    
  • class Solution {
        public int[] sortArrayByParityII(int[] A) {
            int length = A.length;
            int[] sorted = new int[length];
            int evenIndex = 0, oddIndex = 1;
            for (int i = 0; i < length; i++) {
                int num = A[i];
                if (num % 2 == 0) {
                    sorted[evenIndex] = num;
                    evenIndex += 2;
                } else {
                    sorted[oddIndex] = num;
                    oddIndex += 2;
                }
            }
            return sorted;
        }
    }
    
    ############
    
    class Solution {
        public int[] sortArrayByParityII(int[] nums) {
            for (int i = 0, j = 1; i < nums.length; i += 2) {
                if ((nums[i] & 1) == 1) {
                    while ((nums[j] & 1) == 1) {
                        j += 2;
                    }
                    int t = nums[i];
                    nums[i] = nums[j];
                    nums[j] = t;
                }
            }
            return nums;
        }
    }
    
  • // OJ: https://leetcode.com/problems/sort-array-by-parity-ii/
    // Time: O(N)
    // Space: O(1)
    class Solution {
    public:
        vector<int> sortArrayByParityII(vector<int>& A) {
            for (int i = 0, j = 1, N = A.size(); i < N && j < N; i += 2, j += 2) {
                while (i < N && A[i] % 2 == 0) i += 2;
                while (j < N && A[j] % 2 != 0) j += 2;
                if (i < N) swap(A[i], A[j]);
            }
            return A;
        }
    };
    
  • class Solution:
        def sortArrayByParityII(self, nums: List[int]) -> List[int]:
            n, j = len(nums), 1
            for i in range(0, n, 2):
                if (nums[i] & 1) == 1:
                    while (nums[j] & 1) == 1:
                        j += 2
                    nums[i], nums[j] = nums[j], nums[i]
            return nums
    
    ############
    
    class Solution(object):
        def sortArrayByParityII(self, A):
            """
            :type A: List[int]
            :rtype: List[int]
            """
            odd = [x for x in A if x % 2 == 1]
            even = [x for x in A if x % 2 == 0]
            res = []
            iseven = True
            while odd or even:
                if iseven:
                    res.append(even.pop())
                else:
                    res.append(odd.pop())
                iseven = not iseven
            return res
    
  • func sortArrayByParityII(nums []int) []int {
    	for i, j := 0, 1; i < len(nums); i += 2 {
    		if (nums[i] & 1) == 1 {
    			for (nums[j] & 1) == 1 {
    				j += 2
    			}
    			nums[i], nums[j] = nums[j], nums[i]
    		}
    	}
    	return nums
    }
    
  • /**
     * @param {number[]} nums
     * @return {number[]}
     */
    var sortArrayByParityII = function (nums) {
        for (let i = 0, j = 1; i < nums.length; i += 2) {
            if ((nums[i] & 1) == 1) {
                while ((nums[j] & 1) == 1) {
                    j += 2;
                }
                [nums[i], nums[j]] = [nums[j], nums[i]];
            }
        }
        return nums;
    };
    
    

All Problems

All Solutions