剑指offer-7:调整数组顺序使奇数位于偶数前面
一、相对位置可以改变
1、题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。
2、分析
不考虑相对位置,可以类比快排,用左右指针法。
left=0,从左向右遍历,若是奇数left加一,若是偶数与右边的奇数交换位置。
right=arr.length-1,从右向左遍历,若是偶数right加一,若是奇数与左边的偶数交换位置。
3、代码
public static void reOrderArray(int [] array) {
    int i=0;
    int j=array.length-1;
    int temp=0;
   while(i<j){
       if ((array[i]&1)==1){
           i++;
           continue;
       }
       if ((array[j]&1)==0) {
           j--;
           continue;
       }
       temp=array[i];
       array[i]=array[j];
       array[j]=temp;
       i++;
       j--;
   }
   for (int ii=0;ii<array.length;ii++){
       System.out.print(array[ii]+",");
       System.out.println();
   }
}
二、相对位置不变
1、题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
2、分析
考虑到要保持相对位置,就不能用左右指针法。
(1)最简单的方法就是循环遍历两次,分别找到奇数、偶数添加到list集合中,最后再把集合中的元素添加到数组中。
(2)类似于冒泡排序,从头开始,相邻元素只要是前偶后奇就交换,不同的是内循环每次都从头开始,防止一开始就有许多连续的偶数情况
(3)
3、代码
//(1)
import java.util.*;
public class Solution {
public void reOrderArray(int [] array) {
List<Integer> list = new ArrayList();
for(int i=0;i<array.length;i++){
if((array[i]%2)==1){
list.add(array[i]);
}
}
for(int i=0;i<array.length;i++){
if((array[i]%2)==0){
list.add(array[i]);
}
}
for(int i=0;i<array.length;i++){
array[i] = list.get(i);
}
}
} //(2)
import java.util.*;
public class Solution {
public void reOrderArray(int [] array) {
int temp = 0;
int length = array.length;
for(int i=0;i<length;i++){
for(int j=0;j<length-1;j++){
if((array[j]%2==0)&&(array[j+1]%2==1)){
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
} //(3)
import java.util.*;
public class Solution {
public void reOrderArray(int [] array) {
int left = 0;
int right = 0;
int size = array.length;
while(right < size){
if(array[right] % 2 != 0){
int temp = array[right];
for(int i=right ;left<i;i--){
array[i] = array[i-1];
}
array[left] = temp;
right ++;
left ++;
}else{
right ++;
}
}
}
}
剑指offer-7:调整数组顺序使奇数位于偶数前面的更多相关文章
- 剑指offer:调整数组顺序使奇数位于偶数前面
		
题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 分析 事实上,这个题比较简单,很多种方式都可以实现,但是其时间复杂度或空间复 ...
 - 剑指Offer:调整数组顺序使奇数位于偶数前面【21】
		
剑指Offer:调整数组顺序使奇数位于偶数前面[21] 题目描述 输入一个整形数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 解题分析 使用插 ...
 - 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
		
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Offer 21 这题的解法其实是考察快慢指针和头尾指针. package com.walegarrett.offer; /** * @Aut ...
 - 【Java】 剑指offer(21) 调整数组顺序使奇数位于偶数前面
		
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇 ...
 - 【剑指Offer】调整数组顺序使奇数位于偶数前面 解题报告(Python)
		
[牛客网]调整数组顺序使奇数位于偶数前面 解题报告 标签(空格分隔): 牛客网 题目地址:https://www.nowcoder.com/questionTerminal/beb5aa231adc4 ...
 - 剑指offer(07)-调整数组顺序使奇数位于偶数前面【转】
		
来源:http://www.acmerblog.com/offer-6-2429/ 题目来自剑指offer系列 九度 1516 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得 ...
 - Go语言实现:【剑指offer】调整数组顺序使奇数位于偶数前面
		
该题目来源于牛客网<剑指offer>专题. 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和 ...
 - 剑指OFFER之调整数组顺序使奇数位于偶数前面找(九度OJ1516)
		
题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每个输 ...
 - 剑指Offer 13. 调整数组顺序使奇数位于偶数前面 (数组)
		
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 题目地址 https ...
 - 【剑指offer】调整数组顺序使奇数位于偶数前面
		
一.题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 二.思路: 用 ...
 
随机推荐
- Spring Boot使用阿里云证书启用HTTPS
			
1.到阿里云下载证书页面下载证书 2.根据页面内容,可以使用2种证书:PFX JKS 把对应证书放到src/main/resources目录下 在application.properties文件中加入 ...
 - C++入门经典-例2.5-使用附加格式说明scanf函数的格式输入
			
1:代码如下: // 2.5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" int main() { long iLong; /*长整型变 ...
 - 第十一周Java学习总结。
			
java UI 图形界面知识梳理: ATM: 在整个AWT包中提供的所有工具类主要分为以下3种. (1)组件:Component. (2)容器:Container. (3)布局管理器:LayoutMa ...
 - python3笔记二十三:正则表达式之其他函数
			
一:学习内容 re.split函数 re.finditer函数 re.sub函数 group()分组 re.compile函数 二:字符串切割---re.split函数 需要导入包:import re ...
 - 胜利点20191010-6 alpha week 1/2 Scrum立会报告+燃尽图 04
			
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8749 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 杨萍队名:胜 ...
 - LeetCode 168. Excel表列名称(Excel Sheet Column Title)
			
题目描述 给定一个正整数,返回它在 Excel 表中相对应的列名称. 例如, 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 - ...
 - 七、smarty--缓存的控制
			
1.建议缓存 $smarty->cacheing = true; //设置为2是给每一个模板设置缓存 $smarty->setCacheDir(“”); 2.处理缓存的生命周期 $smar ...
 - Electron对JQuery的支持问题
			
最近在了解Electron框架写应用,偶然发现在html中使用<script src="./jquery.js"></script>这种方式引入JQuery ...
 - Echarts 里面获取纵坐标刻度的间距
			
概述 今天 PM 说,需要把 echarts 图表的纵坐标调成这样:如果全是 4 位数就用 K 为单位.冷静分析,就是说如果纵坐标刻度的间距是四位数,就用 K 为单位.那要如何获取纵坐标刻度的间距呢? ...
 - 10 mysql选错索引
			
10 mysql选错索引 在mysql表中可以支持多个索引,有的sql不指定使用哪个索引,由mysql自己来决定,但是有时候mysql选错了索引,导致执行很慢. 例子 CREATE TABLE `t1 ...