首页 > 编程语言 >每日算法之调整数组顺序使奇数位于偶数前面(一)

每日算法之调整数组顺序使奇数位于偶数前面(一)

时间:2022-12-01 10:00:44浏览次数:33  
标签:奇数 int 偶数 ++ 算法 数组 array

JZ21 调整数组顺序使奇数位于偶数前面(一)

描述

输入一个长度为 n 整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

思路:

既然要把所有的奇数放在数组前面,所有的偶数放在数组后面,那可以统计奇数在原数组中出现了多少次,这样就可以找到二者的分界线。
有了分界线以后,前面就是奇数,后面就是偶数,可以利用两个指针分别指向二者的开头,遇到一个元素就添加到相应位置,然后指针移动。

具体做法:
step 1:遍历数组,统计奇数出现的次数,即找到了偶数开始的位置。
step 2:准备一个和原数组同样长的新数组承接输出,准备双指针,x指向奇数开始的位置,y指向偶数开始的位置。
step 3:遍历原数组,遇到奇数添加在指针x后面,遇到偶数添加在指针y后面,直到遍历结束。

代码

package mid.JZ21调整数组顺序使奇数位于偶数前面1;

import jdk.nashorn.internal.ir.CallNode;
import sun.awt.geom.AreaOp;

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * @param array int整型一维数组
     * @return int整型一维数组
     */
    public int[] reOrderArray(int[] array) {
        // write code here
        if (array == null || array.length == 0) return new int[0];

        int[] res = new int[array.length];

        int right = 0;
        for (int i = 0; i < array.length; i++) {
            if ((array[i] & 1) != 0) right++;
        }
        int left = 0;
        for (int i = 0; i < array.length; i++) {
            if ((array[i] & 1) == 0) {
                res[right] = array[i];
                right++;
            } else {
                res[left] = array[i];
                left++;
            }
        }
        return res;
    }
    
}

标签:奇数,int,偶数,++,算法,数组,array
From: https://www.cnblogs.com/loongnuts/p/16940535.html

相关文章

  • Java HashMap 在获得 Key 的 Hash 值的时候用的是什么算法
    Java在HashMapKey的Hash值的时候用的的是自己Object中的hashCode()算法。返回的结果是一个整数值。如果你查看JDK的源代码的话,在HashMap类中会有下面的这......
  • 经典算法——最短路径(Floyd+Dijkstra)
    Floyd时间复杂度:O(n^3)简介:作为最短路算法中复杂度最高的算法没有之一,标志性结构三层循环,核心结构本质DP思想具 有动态规划的无后效性他真的没有优点啦?!不,他有!虽然SPF......
  • 常用代码模板1——基础算法
    常用代码模板1——基础算法快速排序算法模板voidquick_sort(intq[],intl,intr){if(l>=r)return;inti=l-1,j=r+1,x=q[l+r>>1];......
  • 算法基础-搜索
    搜索框架dfs框架#include<bits/stdc++.h>usingnamespacestd;constintN=100005;structNode{charvalue;intlson,rson;}tree[N];......
  • 最小生成树算法及其常见应用
    最小生成树定义:在无向图\(G=(V,E)\)中,一颗连接所有节点的树(无根树)被称为这个无向图的生成树,其中边权之和最小的那一颗被称为最小生成树定理:最小生成树一定包含无向图中......
  • 最短路算法及其常见扩展应用
    第一节——最短路问题基本概念:由于无向边可以看作两条相反的有向边,于是我们默然按照有向边的形式讨论存图方式:邻接矩阵:空间复杂度\(O(n^2)\),优点:\(O(1)\)查找\(x->y\)......
  • Java中进制基础知识与算法题
    本篇文章旨在给大家普及下计算机内部数据的机器级表示方式,即:二进制、八进制、十进制、十六进制…对于进制,我们从小最先接触的是十进制,这个也是我们日常生活中应用最多的数......
  • 代码随想录算法训练营Day14|144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉
    代码随想录算法训练营Day14|144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历144.二叉树的前序遍历144.二叉树的前序遍历递归遍历/***Defini......
  • 跟误告警说再见,Smart Metrics 帮你用算法配告警
    作者:董善东、陈昆仪引言某位资深SRE同学表示“一天不收个几十条告警,我都觉得不安心”,“告警天天告,我们的应用一点事情都没有”。这都反映了一个非常普遍的现象--"误......
  • 14 STL-常用算法
    ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录、总结、沉淀。同时希望对刷到的朋友有所帮助,一起加油哦! 每一次学习都是为了追求智慧!写在前面,本篇章主要介......