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

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

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

O(N), O(N)

只需要借助新数组,遍历两次,分别将奇数和偶数,添加即可

public class Solution {
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param array int整型一维数组 
 * @return int整型一维数组
 */
public int[] reOrderArray (int[] array) {
    // write code here
    int[] res = new int[array.length];
    int idx = 0;
    
    for(int i = 0; i < array.length; i++){
        if(array[i] % 2 != 0){
            res[idx++] = array[i];
        }
    }
    
    for(int i = 0; i < array.length; i++){
        if(array[i] % 2 == 0){
            res[idx++] = array[i];
        }
    }
    
    return res;
}
}

O(N2), O(1)

参照 #调整数组顺序使奇数位于偶数前面(二)# 的双指针解法 https://blog.nowcoder.net/n/23814b2178764dd9a75e34dcde9b1494

(二)不要求相对顺序,(一)要求相对顺序,上一个解法是用空间换取了时间,接下的解法则是用时间换空间,思路同(二)双指针解法相似,可以发现,(二)中的解法只能保证奇数的相对顺序,却不能保证偶数的相对顺序,那么我们就要针对性的解决这一问题

[2,4,6,5,7],以此为例子说明,当left指向2,i指向5,若是(二)中的解法,变换之后则是[5,4,6,2,7],偶数相对位置发生变化,在(一)中,我们要使其成为[5,2,4,6,7],则相当于从left至i-1依次向后移动一位,然后left处的位置用i的位置替换,详细见代码

public class Solution {
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param array int整型一维数组 
 * @return int整型一维数组
 */
public int[] reOrderArray (int[] array) {//双指针
    // write code here
    int left = 0;
    for(int i = 0; i < array.length; i++){
        if(array[i] % 2 != 0){
            int tmp = array[i];
            for(int j = i; j > left; j--){
                array[j] = array[j - 1];
            }
            array[left++] = tmp;
        }
    }
    
    return array;
}
}
全部评论

相关推荐

11-22 16:49
已编辑
北京邮电大学 Java
美团 质效,测开 n*15.5
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
10-12 10:48
已编辑
秋招之苟:邻居家老哥19届双2硕大厂开发offer拿遍了,前几天向他请教秋招,他给我看他当年的简历,0实习实验室项目技术栈跟开发基本不沾边😂,我跟他说这个放在现在中厂简历都过不了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-21 19:05
面试官_我太想进步了:混学生会的,难怪简历这么水
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务