题目:

  输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

思路:

  如果忽略题目中“并保证奇数和奇数,偶数和偶数之间的相对位置不变,有以下解法,设两个指针,前面一个指针停在偶数位置,后面一个指针停在奇数位置,然后交换,直达第一个指针跑到第二个指针之后结束,

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)的更多相关文章

  1. 【Java】 剑指offer(10) 旋转数组的最小数字

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. ...

  2. 剑指offer 10:矩形覆盖

    题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? public class Solution { public ...

  3. 剑指offer 10.递归和循环 矩形覆盖

    题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?   当n=0时 ,target=0:   当n=1时 ,ta ...

  4. 剑指Offer 10. 矩形覆盖 (递归)

    题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 题目地址 https://www.nowcoder.com/ ...

  5. 剑指offer 10矩形覆盖

    我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法 java版本: public class Solution { publ ...

  6. [剑指Offer] 10.矩形覆盖

    题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? [思路]可归纳得出结论: f(n) = f(n-1) + f ...

  7. [剑指offer] 10. 旋转数组的最小数字

    题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 思路: 利用dp[i]保存盖2*i的矩形有多少种办法. 通过 ...

  8. 剑指offer——10跳台阶演变

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   题解: 纯找规律题:   class Solution { public: ...

  9. [剑指offer]10.斐波那契数列+青蛙跳台阶问题

    10- I. 斐波那契数列 方法一 Top-down 用递归实现 def fibonacci(n): if n <= 0: return 0 if n == 1: return 1 return ...

随机推荐

  1. WPF自定义控件(一)の控件分类

    一.什么是控件(Controls) 控件是指对数据和方法的封装.控件可以有自己的属性和方法,其中属性是控件数据的简单访问者,方法则是控件的一些简单而可见的功能.控件创建过程包括设计.开发.调试(就是所 ...

  2. Grid布局指南

    简介 CSS网格布局(又称“网格”),是一种二维网格布局系统.CSS在处理网页布局方面一直做的不是很好.一开始我们用的是table(表格)布局,然后用float(浮动),position(定位)和in ...

  3. UVA140-Bandwidth(搜索剪枝)

    Problem UVA140-Bandwidth Time Limit: 3000 mSec  Problem Description Given a graph (V, E) where V is ...

  4. Python之Requests库的异常

    异常                        说明                                     requests.ConnectionError 网络链接错误一场,如 ...

  5. [国家集训队]happiness

    嘟嘟嘟 就这么建. --- #include<cstdio> #include<iostream> #include<cmath> #include<algo ...

  6. 根据JavaBean创建数据库的操作SQL

    根据JavaBean创建数据库的操作SQL import java.lang.reflect.Field; public class GenerateSQL { public static void ...

  7. A. Many Equal Substrings(水题)

    思路: 直接比较橘色框里的取第一次相等,即可. #include<iostream> #include<string> using namespace std; string ...

  8. JavaScript模块化思想requireJS的使用

    1. 使用require.js的意义   (1)实现JS文件的异步加载,避免网页因为加载JS文件缓慢造成网页未响应 (2)管理模块之间的依赖性,便于代码的编写和维护.页面中只需要引入require.j ...

  9. bootstrapvalidator 用法

    1.引入js.css 2.用法 API:http://bootstrapvalidator.votintsev.ru/api/ 参考博客:https://blog.csdn.net/u01393846 ...

  10. linux进程管理总结

    目录 一.进程相关的概念 二.关闭会话时子进程进程被杀死 三.nohup的原理 四.setsid原理 五.daemon &和守护进程的区别 六.服务进程为什么要fork两次 七.systemd ...