调整该数组中数字的顺序,奇数在前,偶数在后

题目描述

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

class Solution {
public:
    void reOrderArray(vector<int> &array) {

        vector<int> a,b;
        for(int i=0;i<array.size();i++) {
            if(array[i]%2==1)
                a.push_back(array[i]);
            else
                b.push_back(array[i]);
        }

        for(int j=0;j<b.size();j++)
            a[a.size()-1+j]=b[j];

    }
};

  超时,溢出了!

改进一下代码,如下。

class Solution {
public:
    void reOrderArray(vector<int> &array) {

        vector<int> b;
        vector<int>::iterator ib;
        for(ib=array.begin();ib!=array.end();) {
            if(*ib%2==0) {
            	b.push_back(*ib);
                ib=array.erase(ib);
            }
            else
                ib++;
        }

        vector<int> ::iterator ib2=b.begin();
        for(ib2;ib2!=b.end();ib2++) {
            array.push_back(*ib2);
        }

    }
};

  

碰到另外一种思路:

思路:类似冒泡算法,前偶后奇数就交换:
class Solution {
public:
    void reOrderArray(vector<int> &array) {
 
         
        for (int i = 0; i < array.size();i++)
        {
            for (int j = array.size() - 1; j>i;j--)
            {
                if (array[j] % 2 == 1 && array[j - 1]%2 == 0) //前偶后奇交换
                {
                    swap(array[j], array[j-1]);
                }
            }
        }
    }
};

  

时间: 2024-08-25 14:24:57

调整该数组中数字的顺序,奇数在前,偶数在后的相关文章

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

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变.  思路:新建一个数组先把原数组中的奇数push进去再把偶数push进去,然后用新数组数据覆盖原数组即可 复杂度O(n),用空间换时间 class Solution { public:     void reOrderArray(vector<int> &array) {         vector<int&

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

如果不考虑奇数和奇数,偶数和偶数之间的相对位置不变.那么只需要两个指针分别指向数组的头和尾,依次比较. 1. 如果头指针指向的数组位置为奇数,那么就判断尾指针指向的数组位置的奇偶性.如果是奇数,则头指针后移一个位置,如果是偶数,则尾指针前移一个位置. 2. 如果头指针指向的数组位置为偶数,那么就判断尾指针指向的数组位置的奇偶性.如果是奇数,则交换头尾指针指向的数组元素,如果是偶数,则尾指针前移一个位置. 代码如下: public class Q13_ReOrderArray { public s

【算法】 调整数组顺序,使得奇数在前偶数在后,分别保证奇数和偶数之间的相对位置不变

题目:输入一个整形数组,将数组重新排序,使得所有奇数在前偶数在后,并使奇数之间和偶数之间的相对位置爆出不变. 思想:从数组开头开始遍历所有数组.当碰到偶数时,将偶数打包,即记录到目前为止偶数的个数,把这些偶数看成一个整体:当碰到奇数时,将这个奇数与前面的偶数整体对调位置. #include <stdio.h> #include <stdlib.h> void nuo(int *a,int j,int nu)                     //将奇数与前面所有偶数调换位置

数组中,奇数放前偶数放后

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 错误代码: public class Solution { public void reOrderArray(int [] array) { int len=array.length; for(int i=0;i<len;i++){ if((array[i]&1)==0){ int j; for(j=i;j<

调整数组中数字的顺序,使得所有奇数位于数组的前半部分

输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分.要求时间复杂度为O(n),不要求保留数组元素的相对位置. 解析:可以维护两个指针:第一个指针初始化为数组的第一个数字,它只向后移动:第二个指针初始化为数组的最后一个数字,它只向前移动.在两个指针相遇之前,第一个指针总是位于第二个指针的前面.如果第一个指针指向的数字是偶数而第二个指针指向的数字是奇数,就交换这两个数字. 方法一: void patition(ref int[] arr, int n)

使用TreeSet和Comparator,写TreeSetTest2 要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列

/* * 使用TreeSet和Comparator,写TreeSetTest2 *要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列, *排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列 */ import java.util.Comparator; import java.util.TreeSet; public class TreeTest2 { public static void main(String[] args) { // TODO Aut

奇数在前偶数在后。各自反转后相连

#include <iostream> #include <stdlib.h> using namespace std; struct node { struct node *next; int value; }; node *CreateListNode(int value) { if(value==NULL) return NULL; node *pNode=(node*)malloc(sizeof(node)); pNode->value=value; pNode-&g

不用遍历 递归算法 求数组中数字的最大值

#include "stdio.h"int ax[] ={1000,5,6,8,9,800,5,200,3,6,5,8,9};int paixu (int n, int ret){    if (n==0) return ret>ax[0]?ret:ax[0];    int ret1= ret>ax[n]? ret:ax[n];    return paixu(n-1,ret1);}int main(int argc, char* argv[]){    int numb

LeetCode:Summary Ranges - 获取数组中数字的范围

1.题目名称 Summary Ranges(获取数组中数字的范围) 2.题目地址 https://leetcode.com/problems/summary-ranges/ 3.题目内容 英文:Given a sorted integer array without duplicates, return the summary of its ranges. 中文:给出一个整数数组,返回这个数组中数字的范围 例如:给出数组 [0,1,2,4,5,7],返回 ["0->2",&quo