剑指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】调整数组顺序使奇数位于偶数前面
一.题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 二.思路: 用 ...
随机推荐
- Win10无法修改编辑hosts文件
Win10无法修改编辑hosts文件 一.总结 一句话总结: 这里我的问题是windows的某次更新中把hosts文件或者上级目录设置成了只读,在文件属性中去掉这个只读就好 后文的操作相当于是给文件添 ...
- zeppelin安装使用
官网:http://zeppelin-project.org/ 代码:https://github.com/NFLabs/zeppelin 使用:按照官网的视频操作一遍,应该就懂了http://y ...
- java JIT
JVM 即时编译器即时编译器 (Just In Time Compiler) 简称JIT JAVA程序最初是通过解释器 (Interpreter) 进行解释执行的,当 JVM 发现某个方法或代码块运行 ...
- php实现:当未登录时转到登陆页面
判断session是否存在,不存在则跳转到登录页面session_start(); if ( !$_SESSION['xxx'] ) { header("Location: login ...
- BOSCH汽车工程手册————驾驶员辅助系统
根据交通事故统计得出平均每分钟有一人死于交通事故 而辅助驾驶系统能够为驾驶员洞察了解汽车周围情况,识别危险的行驶状况. 提早为驾驶员告诉危险信息,可减少60%汽车驶上主路事故和1/3汽车前碰事故. 有 ...
- ControlTemplate in WPF —— Shared in all file
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...
- jqGrid整理笔记
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- c++ 数据抽象 、封装 接口(抽象类)
一.数据抽象 即,只向外界提供关键信息,并隐藏其后台的实现细节 ———— 一种依赖于接口和实现分离的编程(设计)技术 例如,程序可以调用 sort() 函数,而不需要知道函数中排序数据所用到的算法 c ...
- 【VS开发】【智能语音处理】特定人语音识别算法—DTW算法
DTW(动态时间弯折)算法原理:基于动态规划(DP)的思想,解决发音长短不一的模板匹配问题.相比HMM模型算法,DTW算法的训练几乎不需要额外的计算.所以在孤立词语音识别中,DTW算法仍得到广泛的应用 ...
- C#各种委托介绍
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 一.委托的声明 Delegate Delegate 我们常用到的一种声明 Delegate 至少 ...