剑指offer(10)
题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路:
如果忽略题目中“并保证奇数和奇数,偶数和偶数之间的相对位置不变,有以下解法,设两个指针,前面一个指针停在偶数位置,后面一个指针停在奇数位置,然后交换,直达第一个指针跑到第二个指针之后结束,



public class Solution {
public void reOrderArray(int [] array) {
int point1 = 0;
int point2 = array.length-1;
while(point1<point2){
//这里要注意一下运算符的优先级
while(point1<point2 && (array[point1]&0x1)!=0){
point1++;
}
while(point1<point2&&(array[point2]&0x1)==0){
point2--;
}
if(point1<point2){
int temp = array[point1];
array[point1] = array[point2];
array[point2] = temp;
}
}
}
}
这里为了增强代码的重用性,可以将判断标准另起一个函数.
回到原题,我们这里可以设置两个栈,分别从头到尾读数,把奇偶数分开到两个栈里,然后按要求从数组后面开始弹栈。
import java.util.Stack;
public class Solution {
public void reOrderArray(int [] array) { Stack stack1 = new Stack();
Stack stack2 = new Stack(); int oddLength = 0;
int evenLength = 0; for(int i=0;i<array.length;i++){
if((array[i]&0x1)==1){
stack1.push(array[i]);
oddLength++;
}else{
stack2.push(array[i]);
evenLength++;
}
} for(int i=array.length-1;i>=array.length-evenLength;i--){
array[i] = (int)stack2.pop();
}
for(int i=oddLength-1;i>=0;i--){
array[i] = (int)stack1.pop();
}
}
}
剑指offer(10)的更多相关文章
- 【Java】 剑指offer(10) 旋转数组的最小数字
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. ...
- 剑指offer 10:矩形覆盖
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? public class Solution { public ...
- 剑指offer 10.递归和循环 矩形覆盖
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 当n=0时 ,target=0: 当n=1时 ,ta ...
- 剑指Offer 10. 矩形覆盖 (递归)
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 题目地址 https://www.nowcoder.com/ ...
- 剑指offer 10矩形覆盖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法 java版本: public class Solution { publ ...
- [剑指Offer] 10.矩形覆盖
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? [思路]可归纳得出结论: f(n) = f(n-1) + f ...
- [剑指offer] 10. 旋转数组的最小数字
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 思路: 利用dp[i]保存盖2*i的矩形有多少种办法. 通过 ...
- 剑指offer——10跳台阶演变
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 题解: 纯找规律题: class Solution { public: ...
- [剑指offer]10.斐波那契数列+青蛙跳台阶问题
10- I. 斐波那契数列 方法一 Top-down 用递归实现 def fibonacci(n): if n <= 0: return 0 if n == 1: return 1 return ...
随机推荐
- Django-rest-framework 接口实现 分页:(Pagination) 解析器(Parser) 渲染器(renderer)
分页:(Pagination) rest_framework 中已经定义好了 3 种 分页模式 from rest_framework.pagination import PageNumberPagi ...
- python的各种推导式
python的各种推导式(列表推导式.字典推导式.集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体 ...
- nosql:文件存储和sql数据库存储形式之外的存储系统都是nosql
为了设计一个比较好的磁盘缓存,我调查了大量的开源库,包括 TMDiskCache.PINDiskCache.SDWebImage.FastImageCache 等,也调查了一些闭源的实现,包括 NSU ...
- arduino json 解析
#include <ArduinoJson.h> void setup() { Serial.begin(9600); DynamicJsonDocument jsonBuffer(200 ...
- 16 python 初学(生成器)
列表生成器(列表生成式): 使用此种方式生成的列表会放在内存中占用内存 a = [x*2 for x in range(1, 11)] print(a) # >>> [2, 4, ...
- python 的__init__ 和__new__ 区别
在此介绍一下 __init__ 和 __new__ 先后调用的区别 代码如下: # __init__ 和 __new__的区别 # 通常在编代码时,__init__ 较为常见,但是__new__却 ...
- WPF(一)
什么是WPF WPF(Windows Presentation Foundation)是用于Windows的现代图形显示系统.与之前出现的技术相比,WPF发生了根本性变化.WPF引用了"内置 ...
- Feature Extractor[VGG]
0. 背景 Karen Simonyan等人在2014年参加Imagenet挑战赛的时候提出的深度卷积神经网络.作者通过对2013年的ILSVRC中最好的深度神经网络模型(他们最初的对应模型都是ale ...
- mongodb java3.2驱动 测试 一些记录
mongo驱动包 自带线程池的概念 获取 MongoClient mongoClient 后 通过客户端(mongoClient ) 获取 库操作 MongoDatabase 获取 表操作 Mongo ...
- Ext 编辑 comobox编辑源只能选择一个
storePrType.DataSource = optsvc.Select("28").Where(r => r.OptionID == cmbEngineeringPrT ...