剑指offer_13:调整数组顺序

一:题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
二:题目分析
注意本题要求要在调整好奇偶顺序后保持原来的顺序位置不变。
因此解决该题的思想可以类比于冒泡排序,每一趟冒泡后会确定最后一个元素的位置。
三:代码

public class Solution {
     public void reOrderArray(int [] array) {
        int temp=0;
        for(int i=0;i<array.length-1;i++){
                for(int j=0;j<array.length-1-i;j++){
                    if(array[j]%2==0&&array[j+1]%2==1){//如果j位是偶数并且j+1位是奇数则可以进行交换
                        temp=array[j];
                        array[j]=array[j+1];
                        array[j+1]=temp;
                    }
                }
            }
        }
    }

测试结果

四、不关心变化后的顺序
开始,我写的代码是只要将奇数放在偶数前就好,不关心变化后的顺序是否有序。我的思路是设置两个变量,从数组的第一位和倒数第一位分别遍历,直至两个变量相遇,调整完成。
五、代码

public class Oddpreven {
    public static int[] oddpreven(int[] array) {
        int i = 0;
        int j = array.length-1;
        int temp = 0;
        while (i < j) {//当连个变量相遇时,代表前后两部分都找完了
            if (array[i] % 2 == 0) {//前边的变量指向了偶数
                if (array[j] % 2 == 1) {//判断后边的是否指向了奇数
                    temp = array[i];//如果是,就交换位置
                    array[i] = array[j];
                    array[j] = temp;
                    i++;//两个变量同时在走一步
                    j--;
                } else {
                    j--;//如果后边现在不是奇数的话,就接着往前找,前边偶数的先不动
                }
            } else {
                i++;//前边没找到偶数就道标目前没有要交换的,继续走
            }
        }
        return array;
    }
    public static void main(String []args) {
        int[] array = {1, 2, 2,3,3,4,5,1,2,1};
        oddpreven(array);
       for (int i = 0; i < array.length; i++) {
          System.out.print(array[i]+" ");
       }
    }
}

六。测试结果

原文地址:https://blog.51cto.com/14234228/2422787

时间: 2024-11-05 21:57:30

剑指offer_13:调整数组顺序的相关文章

剑指offer——调整数组顺序使奇数位于偶数前面

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

剑指OFFER之调整数组顺序使奇数位于偶数前面找(九度OJ1516)

题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每个输入文件包含一组测试案例.对于每个测试案例,第一行输入一个n,代表该数组中数字的个数.接下来的一行输入n个整数.代表数组中的n个数. 输出: 对应每个测试案例,输入一行n个数字,代表调整后的数组.注意,数字和数字之间用一个空格隔开,最后一个数字后面没有空格. 样例输入: 5 1 2 3 4 5 样例输

【剑指Offer面试题】 九度OJ1516:调整数组顺序使奇数位于偶数前面

题目链接地址: http://ac.jobdu.com/problem.php?pid=1516 题目1516:调整数组顺序使奇数位于偶数前面 时间限制:1 秒内存限制:128 兆特殊判题:否提交:2858解决:924 题目描写叙述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得全部的奇数位于数组的前半部分,全部的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每一个输入文件包括一组測试案例. 对于每一个測试案例.第一行输入一个n,代表该数组

剑指offer编程题Java实现——面试题14调整数组顺序使奇数位于偶数之前

题目: 输入一个整数数组,实现一个函数来调整该数组中数组的顺序,使得所有的奇数位于数组的前半部分,偶数位于数组的后半部分. 解题思路:数组中维护两个指针,第一个指针初始化时候指向数组头部,第二个指针初始化时候指向数组尾部,第一个指针指向的数字总是偶数,第二个指针指向的数字总是奇数,如果第一个指针在第二个指针之前,则交换两指针指向的元素. 1 package Solution; 2 3 /** 4 * 剑指offer面试题14:调整数组顺序是奇数位于偶数前面 5 * 题目:输入一个整数数组,实现一

【剑指offer】Q14:调整数组顺序使奇数位于偶数前面

def isOdd(n): return n & 1 def Reorder(data, cf = isOdd): odd = 0 even = len( data ) - 1 while True: while not isOdd( data[ even ]) : even -= 1 while isOdd( data[ odd ]) : odd += 1 if odd >= even: break data[ even ], data[ odd ] = data[ odd ], data

【剑指offer】调整数组顺序

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25829395 剑指offer上的第14题,九度OJ为了确保输出的结果的唯一性,在输出上做了修改,因此采用的方法自然与书本上不同,这里没有限制,思来想去还是用最简单的方法来做了,非常简单的方法,直接上代码. 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变.

《剑指Offer》题目:调整数组顺序使奇数位于偶数前面

题目描述:调整数组顺序使奇数位于偶数前 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 题目分析: 题目的关键在于在移位以后,奇数和奇数以及偶数和偶数之间的相对位置保持不变. Java代码: public class ReOrderArray { //这种方法不能保证奇数和奇数,偶数和偶数之间的相对位置不变 public static void reOrderArray(

剑指Offer面试题:13.调整数组顺序使奇数位于偶数前面

一.题目:调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 例如有以下一个整数数组:12345,经过调整后可以为:15342.13542.13524等等. 二.解题思路 2.1 基本解法 如果不考虑时间复杂度,最简单的思路应该是从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位.挪完之后在数组的末尾有一个空位,这时把该偶数放入这个空位.由于每碰到一个

剑指offer-数值的整数次方-调整数组顺序使奇数位于偶数前面-代码的完整性-python

题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不同时为0 思路 求base的exponent次方,exponent有两种可能性, exponent>0 for循环exponent次,结果与base相乘 exponent<0 for循环exponent次,结果与base相除 输出结果: # -*- coding:utf-8 -*- class Solution: def Power(self