922. 按奇偶排序数组 II

给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。

对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。

你可以返回任何满足上述条件的数组作为答案。

示例:

输入:[4,2,5,7]
输出:[4,5,2,7]
解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。

提示:

  1. 2 <= A.length <= 20000
  2. A.length % 2 == 0
  3. 0 <= A[i] <= 1000

解法:创建两个数组,遍历一遍数组,一个存放奇数,一个存放偶数,再遍历一遍数组,将奇偶放入指定位置即可

class Solution {
    public int[] sortArrayByParityII(int[] A) {

        int[] oldNum = new int[A.length/2];
        int[] evenNum = new int[A.length/2];
        int p1 = 0,p2 = 0;
        for(int i=0;i<A.length;i++){
            if(A[i] % 2 == 0){
                evenNum[p2++] = A[i];
            }else{
                oldNum[p1++] = A[i];
            }
        }
        p1 = 0;
        p2 = 0;
        for(int i=0;i<A.length;i++){
            if(i % 2 == 0){
                A[i] = evenNum[p2++];
            }else{
                A[i] = oldNum[p1++];
            }
        }
        return A;
    }
}

原文地址:https://www.cnblogs.com/czsy/p/10961233.html

时间: 2024-10-09 00:38:06

922. 按奇偶排序数组 II的相关文章

力扣(LeetCode)922. 按奇偶排序数组 II

给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数. 对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数:当 A[i] 为偶数时, i 也是偶数. 你可以返回任何满足上述条件的数组作为答案. 示例: 输入:[4,2,5,7] 输出:[4,5,2,7] 解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受. 提示: 2 <= A.length <= 20000 A.length % 2 == 0 0 <= A[i] <= 1000 思路 遍

LeetCode 922. Sort Array By Parity II (按奇偶排序数组 II)

题目标签:Sort 利用两个指针,在偶数位置上找到第一个奇数:在奇数位置上找到第一个偶数,然后互相转换数字. 具体看code. Java Solution: Runtime:  2ms, faster than 99.61% Memory Usage: 42.9MB, less than 29.63% 完成日期:03/06/2020 关键点:two pointers class Solution { public int[] sortArrayByParityII(int[] A) { int

LeetCode-922. 按奇偶排序数组 II

给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数. 对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数:当 A[i] 为偶数时, i 也是偶数. 你可以返回任何满足上述条件的数组作为答案. 示例: 输入:[4,2,5,7] 输出:[4,5,2,7] 解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受. 提示: 2 <= A.length <= 20000 A.length % 2 == 0 0 <= A[i] <= 1000 没什么好

力扣——按奇偶排序数组 II

给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数. 对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数:当 A[i] 为偶数时, i 也是偶数. 你可以返回任何满足上述条件的数组作为答案. 示例: 输入:[4,2,5,7] 输出:[4,5,2,7] 解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受. 提示: 2 <= A.length <= 20000 A.length % 2 == 0 0 <= A[i] <= 1000 clas

lintcode 容易题:Merge Sorted Array II 合并排序数组 II

题目: 合并排序数组 II 合并两个排序的整数数组A和B变成一个新的数组. 样例 给出A = [1, 2, 3, empty, empty] B = [4,5] 合并之后A将变成[1,2,3,4,5] 注意 你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素. 解题: 这里给的是两个数组,上题给的是ArrayList格式,比较好处理,重新定义一个长度m+n的数组,太无节操,其他方法一时想不起来 官方解题,方法很技巧,可以倒着排序,这样就很简单了 Java程序: class

按奇偶排序数组

export default (arr) => { // 进行升序排序 arr.sort((a, b) => a - b) // 声明一个空数组用来存储奇偶排序后的数组 let r = [] // 记录奇数.偶数位下标 let odd = 1 let even = 0 // 对数组进行遍历 arr.forEach(item => { if (item % 2 === 1) { r[odd] = item odd += 2 } else { r[even] = item even += 2

LintCode-搜索旋转排序数组 II

跟进"搜索旋转排序数组",假如有重复元素又将如何? 是否会影响运行时间复杂度? 如何影响? 为何会影响? 写出一个函数判断给定的目标值是否出现在数组中. 您在真实的面试中是否遇到过这个题? Yes 样例 给出[3,4,4,5,7,0,1,2]和target=4,返回 true 标签 Expand 分析:有重复数据还是很蛋疼的,重点在于消重,要使得A[l]严格大于A[r],这样就可以继续判断区间的单调性,从而二分 代码: class Solution { /** * param A :

63. 搜索旋转排序数组 II

跟进"搜索旋转排序数组",假如有重复元素又将如何? 是否会影响运行时间复杂度? 如何影响? 为何会影响? 写出一个函数判断给定的目标值是否出现在数组中. 样例 给出[3,4,4,5,7,0,1,2]和target=4,返回 true 发现lintcode有一点不好就是这种O(n)的解法也能给过 1 bool search(vector<int> &A, int target) { 2 // write your code here 3 vector<int&g

LeetCode 81——搜索旋转排序数组 II

1. 题目 2. 解答 2.1. 方法一 基于 LeetCode 33--搜索旋转排序数组 中的方法二. 当 nums[mid] = nums[right] 时,比如 [1, 1, 2, 1, 1],[1, 1, 0, 1, 1],为了找到正确的转折点,我们查看 [mid, right] 之间有没有不等于 nums[mid] 的值,若有,则继续向右查找:否则向左查找. class Solution { public: int Binary_Search(vector<int>& num