题解 | #调整数组顺序使奇数位于偶数前面#

调整数组顺序使奇数位于偶数前面

http://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593

奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

  • 可以使用两个队列,一个保存奇数,一个保存偶数,最后把数据重新放回数组
  • 时间复杂度O(n)
  • 空间复杂度O(n)
import java.util.*;
public class Solution {
    public void reOrderArray(int [] array) {
        int len = array.length;
        Deque<Integer> queue1 = new LinkedList<>();//奇数
        Deque<Integer> queue2 = new LinkedList<>();//偶数
        for(int i=0;i<len;i++){
            if((array[i] & 1) == 1){//奇数
                queue1.offer(array[i]);
            }else{
                queue2.offer(array[i]);                
            }
        }
        int i = 0;
        while(!queue1.isEmpty()){
            array[i++] = queue1.poll();
        }
        while(!queue2.isEmpty()){
            array[i++] = queue2.poll();
        }
    }
}

法二

不能保证奇偶原始顺序

class Solution {
    public int[] exchange(int[] nums) {
        int i = 0, j = nums.length - 1, tmp;
        while(i < j) {
            while(i < j && (nums[i] & 1) == 1) i++;
            while(i < j && (nums[j] & 1) == 0) j--;
            // tmp = nums[i];
            // nums[i] = nums[j];
            // nums[j] = tmp;
            swap(nums,i,j);
        }
        return nums;
    }

    public void swap(int[] nums,int i,int j) {
        if(nums[i] != nums[j]){
            nums[i] ^= nums[j];
            nums[j] ^= nums[i];
            nums[i] ^= nums[j];
        }
    }
}
全部评论

相关推荐

||&nbsp;先说下主播个人情况:211本,暑期实习之前有过一段中大厂的后端实习,暑期拿过腾讯的实习offer,综合考虑业务和语言最终去了美团。实习期间体感还是不错的,5月初去的,去了就一直急着要需求做,担心因为没有产出导致转正失败,在第二个星期就和mt透露我希望能够留用。虽然第一个由于美团新人landing的友好性基本没做什么需求,但是后面也写出了小2w行的代码量(不包含单测)。中期经常主动加班赶需求,经常持续一两个星期加班到10点甚至更后面。mt对我确实不错,也是言传身教,实习期间给我讲了很多关于单测,ddd,set化等的理解,也是受益匪浅,此外在做需求的时候,也能看出把比较有含金量的部分交给我做...
菜菜菜小白菜菜菜:我在字节实习了四个月,有转正的压力所以周末大部分也在公司自学,也是因为一些原因转正拖的很久,这个点还没答辩,过段时间才回去答辩。整个不确定性的焦虑贯穿了我的秋招三个月,我也曾经犹豫过是不是应该放弃转正走秋招更快,最后因为沉没成本一直舍不得放弃,前前后后七个月真的挺累的,尤其是没有来字节实习的同学已经校招拿到意向时更加焦虑。这段时间也跟mentor聊了很多次,他告诉我未来工作上或者生活上,比这些更头疼的事情会更多,关键还是要调整好自己的心态。转正没有通过从过程上来看其实跟你自身没太大的关系,拖了三个月不出结果显然是ld的问题,并且今年美团最近的开奖大家似乎都不是很乐观,所以不去也罢。我在字节实习的时候,6月份有一个赶上春招末期的25届同事刚面进来,也拿到了小sp的薪水。不要对这件事有太大的压力,时代的问题罢了
点赞 评论 收藏
分享
10-22 12:34
测试工程师
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务