剑指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】调整数组顺序使奇数位于偶数前面
一.题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 二.思路: 用 ...
随机推荐
- pip & conda 换源
conda换源方法具体参考清华大学镜像站Anaconda 镜像使用帮助 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn ...
- 在Idea下配置Maven
Idea 自带了apache maven,默认使用的是内置maven,所以我们可以配置全局setting,来调整一下配置,比如远程仓库地址,本地编译环境变量等. 使用IDEA自带的maven时,若不配 ...
- maven仓库,snapshot快照仓库和release发布仓库的区别
首先看下snapshot类型 建立一个maven-privider项目,版本定义为1.1-SNAPSHOT 创建一个privider类,写一个hello()方法,并推送maven私有仓库 然后再建立一 ...
- du和df目录大小不一致
最近遇到个问题 df查看基本没有空间了 但是查找大文件 也基本没有 ,原来是之前的大文件删除了 没有生效导致的 用如下命令,查找到相关进程ID 然后kill就行了 lsof | grep delete ...
- golang RPC通信读写超时设置
golang RPC通信中,有时候就怕读写hang住. 那是否可以设置读写超时呢? 1.方案一: 设置连接的读写超时 1.1 client RPC通信基于底层网络通信,可以通过设置connection ...
- Ubuntu下查找nginx日志
使用awk检测nginx日志, 按小时计数 awk '{split($4,array,"[");if(array[2]>="29/May/2016:00:00:26 ...
- ControlTemplate in WPF —— Checkbox
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...
- 阶段3 2.Spring_08.面向切面编程 AOP_5 切入点表达式的写法
写测试类来测试..也不需要整合JUnit了就是个普通的测试类. 我们要看就是有没有给我们真正的实现 记录日志 配置起作用了. 三个方法都调用一下 目前我们的配置只能对saveAccount增强 通常情 ...
- squid代理使用yum源
参考文档:https://blog.csdn.net/tuolaji8/article/details/73613859https://www.centos.bz/2017/10/centos-7%E ...
- Oracle 笔记(四)
PLSQL编程[语法.plsql控制语句.异常.游标.触发器.存储过程] 1. PLSQL的语法–块编程 a) 概念:procedural language s ...