剑指offer面试题14-调整数组顺序使奇数位于偶数前面
题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得全部奇数位于数组的前半部分。全部偶数位于数组的后半部分。
前后分的这个。,让我想起来高速排序。好吧,就用这个做。
考虑到了排序的可扩展性,这里的推断条件设置为接口。
package com.aii.algorithm;
public class ArrayAdjuster {
public void adjust(int[] array, CallBack callBack) {
if (array == null) {
throw new RuntimeException();
}
partition(array, 0, array.length - 1, callBack);
}
// 在快排的基础上增加了一个接口
private void partition(int[] array, int start, int end, CallBack condition) {
if (array.length == 0) {
return;
}
int tmp = array[start];
int tmpIndex = start++;
while (start < end) {
while (start < end && !condition.event(array[end])) {
end--;
}
if (start < end && condition.event(array[end])) {
array[tmpIndex] = array[end];
tmpIndex = end--;
}
//
while (start < end && condition.event(array[start])) {
start++;
}
if (start < end && !condition.event(array[start])) {
array[tmpIndex] = array[start];
tmpIndex = start++;
}
}
array[tmpIndex] = tmp;
}
public interface CallBack {
boolean event(int i);
}
}
測试用例
package com.aii.algorithm;
import java.util.Arrays;
import org.junit.Test;
import com.aii.algorithm.ArrayAdjuster.CallBack;
public class ArrayAdjusterTest {
@Test
public void test() {
int[] a = { 1, 2, 3, 4, 6, -2, -3, 0, 1, -1 };
new ArrayAdjuster().adjust(a, new CallBack() {
@Override
public boolean event(int i) {
if (i % 2 == 0) {
return false;
}
return true;
}
});
System.out.println(Arrays.toString(a));
}
}
结果:
[-1, 1, 3, -3, 1, -2, 6, 0, 4, 2]
剑指offer面试题14-调整数组顺序使奇数位于偶数前面的更多相关文章
- C++版 - 剑指offer面试题14: 调整数组顺序使奇数位于偶数前面
题目: 调整数组顺序使奇数位于偶数前面 热度指数:11843 时间限制:1秒 空间限制:32768K 本题知识点: 数组 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇 ...
- 剑指Offer:面试题14——调整数组顺序使奇数位于偶数前面(java实现)
问题描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 思路: 1.最简单的想法,不考虑时间复杂度,扫描数组,遇到偶数,先取出这 ...
- 剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面
剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面2013-11-30 02:17 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部 ...
- 剑指offer(13)调整数组顺序使奇数位于偶数前面
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 题目分析 判断是 ...
- 【剑指Offer】13、调整数组顺序使奇数位于偶数前面
题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 解题思 ...
- 【剑指offer】Q14:调整数组顺序使奇数位于偶数前面
def isOdd(n): return n & 1 def Reorder(data, cf = isOdd): odd = 0 even = len( data ) - 1 while T ...
- 剑指offer编程题Java实现——面试题14调整数组顺序使奇数位于偶数之前
题目: 输入一个整数数组,实现一个函数来调整该数组中数组的顺序,使得所有的奇数位于数组的前半部分,偶数位于数组的后半部分. 解题思路:数组中维护两个指针,第一个指针初始化时候指向数组头部,第二个指针初 ...
- 牛客网剑指offer第13题——调整数组顺序使得奇数位于偶数前面
题目来源:剑指offer 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变 ...
- 《剑指offer》面试题14 调整数组顺序使奇数位于偶数前面 Java版
(输入整数数组,使所有奇数位于前半部分,所有偶数位于后半部分.) 我的方法:想到用两个下标分别表示奇数和偶数的界线,一个在开头,一个在末尾,判断每一个数字的类别,然后将它放入对应的范围内,移动下标,直 ...
- 剑指offer-面试题14.调整数组顺序使奇数位于偶数的前面
题目:输入一个整数数组,实现一个函数来调整该数组中的数字的顺序, 使得所有的奇数位于数组的前半部门,所有的偶数位于数组的后半部门. 这一题一看其实是很简单的,当然在不考虑效率的情况可以这样考虑 我们将 ...
随机推荐
- NoSQL:linux操作memcached
缓存数据库 一 NoSQL简介 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",泛指非关系型的数据库,随着互联网web2.0网站的兴起,传统的关系 ...
- (二)springboot整合thymeleaf模板
在我们平时的开发中,用了很久的jsp作view显示层,但是标签库和JSP缺乏良好格式的一个副作用就是它很少能够与其产生的HTML类似.所以,在Web浏览器或HTML编辑器中查看未经渲染的JSP模板是非 ...
- DbContext 和ObjectContext
近日学习新知识,用到CallContext数据槽,一直使用ObjectContext 但同时又在学习EF CodeFirst,上下文定义使用的 DbContext 这时问题来了,如何把DbContex ...
- Linux系列教程(二十一)——Linux的bash基本功能
上篇博客我们介绍了什么是shell,以及编写shell脚本的两种执行方式.我们知道在敲命令的时候,有很多快捷键,比如tab键能补全命令,在比如为什么我们直接敲 ll 命令能显示目录的长格式,其实这是b ...
- 【原创】使用workstation安装Xenserver 6.5+cloudstack 4.10----本地存储模式
1. 背景: 近期由于项目和个人学习得需求,开始接触到Cloudstack,虽然云计算概念在大学刚毕业的时候就已经略有耳闻,但是由于工作原因,也一直没有了解,下班后想自己折腾下cloudstack,便 ...
- 【功能代码】---2.patchca生成验证码
Java使用patchca生成验证码 Patchca是Piotr Piastucki写的一个java验证码开源库,打包成jar文件发布,patchca使用简单但功能强大. 本例实现了自定 ...
- 【Win 10 应用开发】UI Composition 札记(七):基于表达式的动画
上一篇烂文中,老周给大伙伴们介绍过了几个比较好玩的动画.本篇咱们深化主题,说一说基于表达式的动画.这名字好理解,就是你可以用公式 / 等式来产生动画的目标值.比如,你想让某个可视化对象的高度减半,你的 ...
- 封装一个通过class获取元素的方法--我的JS原生库(1)
function getByClass(oParent,sClass){ var aEle = oParent.getElementsByTagName('*'); var result = []; ...
- 有没有必要参加IT培训
近几年,IT培训机构可谓是琳琅满目,稂莠不齐.培训Java的,培训PHP的,培训大数据的等等吧,不一而足. 自己也算是IT技术圈子待了好多年了,面试过一些机构培训出来的学生,也有几个好哥们在培训机构做 ...
- SurfaceView 使用demo 飞机游戏小样
本demo 主要使用了surfaceview 画图. 1.在线程中对canvas操作. 2.实现画图 3.surfaceView 继承了view 可以重写ontouchevent方法来操作输入. 代码 ...