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

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

时间:2022-11-21 09:44:44浏览次数:41  
标签:奇数 int 前面 偶数 算法 数组 array

JZ81调整数组顺序使奇数位于偶数前面(二)

描述

输入一个长度为 n 整数数组,数组里面可能含有相同的元素,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,对奇数和奇数,偶数和偶数之间的相对位置不做要求,但是时间复杂度和空间复杂度必须如下要求。

方法1

思路:

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

代码

public int[] reOrderArrayTwo (int[] array) {
        // write code here
        if (array.length <= 0) return new int[0];
        int[] result = new int[array.length];
        int y = 0;
        for (int i = 0; i < array.length; i++) {
            if (array[i] % 2 == 1) y++;
        }
        int x = 0;
        for (int i = 0; i < array.length; i++) {
            if (array[i] % 2 == 1) {
                result[x] = array[i];
                x++;
            }
            if (array[i] % 2 == 0) {
                result[y] = array[i];
                y++;
            }
        }
        return result;
    }

方法2

思路

这道题不需要要求相对位置不变,因此我们可以采用位置交换的方法,只要奇数全部换到前面就可以了。利用左右双指针分别从数组首尾出发向中间走,交换其中的偶数在前奇数在后的情况。(该方法不能保证相对位置不变)

代码

package esay.JZ81调整数组顺序使奇数位于偶数前面2;

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * @param array int整型一维数组
     * @return int整型一维数组
     */
    //方法1
    /*public int[] reOrderArrayTwo (int[] array) {
        // write code here
        if (array.length <= 0) return new int[0];
        int[] result = new int[array.length];
        int y = 0;
        for (int i = 0; i < array.length; i++) {
            if (array[i] % 2 == 1) y++;
        }
        int x = 0;
        for (int i = 0; i < array.length; i++) {
            if (array[i] % 2 == 1) {
                result[x] = array[i];
                x++;
            }
            if (array[i] % 2 == 0) {
                result[y] = array[i];
                y++;
            }
        }
        return result;
    }*/
    //方法2
    public int[] reOrderArrayTwo(int[] array) {
        // write code here
        int i = 0;
        int j = array.length - 1;
        while (i < j) {
            //左边奇数,右边偶数
            if (array[i] % 2 == 1 && array[j] % 2 == 0) {
                i++;
                j--;
            }
            //左右全是奇数
            else if (array[i] % 2 == 1 && array[j] % 2 == 1) {
                i++;
            }
            //左边偶数,右边奇数
            else if (array[i] % 2 == 0 && array[j] % 2 == 1) {
                int temp = array[j];
                array[j] = array[i];
                array[i] = temp;
            }
            //左右全是偶数
            else {
                j--;
            }
        }
        return array;
    }

    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 3, 4};
        System.out.println(Arrays.toString(new Solution().reOrderArrayTwo(arr)));
    }
}

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

相关文章

  • [排序算法] 桶排序 (C++)
    桶排序解释桶排序思想桶排序是一种空间换取时间的排序方式,是非基于比较的。桶排序顾名思义,就是构建多个映射数据的桶,将数据放入桶内,对每个桶内元素进行单独排序。假设......
  • [排序算法] 计数排序 (C++)
    计数排序解释计数排序思想计数排序的思想十分简单,就是统计每个数字出现的次数。它是一种非基于比较的排序算法,其是通过额外的空间换取时间的方式,来实现更加高效的排序。......
  • 八皇后问题算法
    八皇后问题算法问题引入:在八行八列的格子上放8个皇后(棋子),使得任意两个皇后都攻击不到对方,即使得他们都不在同一行同一列和同一斜线上。思路分析:第一个皇后放在第一......
  • go模拟实现反向代理各种算法
    packageutiltypeHttpServerstruct{HoststringWeightint}typeLoadBalancestruct{Server[]*HttpServerCurrentIndexint}varMapWeight......
  • 实验四:神经网络算法实验
    【实验目的】理解神经网络原理,掌握神经网络前向推理和后向传播方法;掌握神经网络模型的编程实现方法。【实验内容】1.1981年生物学家格若根(W.Grogan)和维什(W.Wirth)发现了......
  • [排序算法] 快速排序 (C++) (含三种写法)
    快速排序解释快速排序QuickSort与归并排序一样,也是典型的分治法的应用。(如果有对归并排序还不了解的童鞋,可以看看这里哟~归并排序)❤❤❤快速排序的分治模式1、......
  • DES和AES加密:指定键的大小对于此算法无效
    “System.ArgumentException”类型的未经处理的异常在mscorlib.dll中发生其他信息:指定键的大小对于此算法无效。在看DES和AES加密的时候,找了个加密的Demo,自己试验的时......
  • python算法题1:给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标
    题目:给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值index1和index2,其中index1必须小于index2。 说明: ......
  • P8195 [传智杯 #4 决赛] 小智的疑惑 ----- 字符串匹配、KMP算法优化next数组
    题目描述传智专修学院给了小智一个仅包含小写字母的字符串 ss,他想知道,里面出现了多少次子串 chuanzhi 呢。我们称一个字符串 tt 是 ss 的子串,当且仅当将 ss 的......
  • 实验四:神经网络算法实验
    【实验目的】理解神经网络原理,掌握神经网络前向推理和后向传播方法;掌握神经网络模型的编程实现方法。【实验内容】1.1981年生物学家格若根(W.Grogan)和维什(W.Wirth)发现了......