• (剑指offer)调整数组顺序使奇数位于偶数前面


    题目描述

    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
    思路:
    从题目得出的信息:
    相对位置不变--->保持稳定性;奇数位于前面,偶数位于后面 --->需要判断,移动元素位置;
    这些都和排序算法相似,而且具有稳定性的排序算法不多,例如插入排序,归并排序、冒泡排序等;这里采用插入排序和冒泡排序的思想实现。
    插入排序还是比较好的,毕竟不用借助其他的数据结构,
    所以空间复杂度为O(1),时间复杂度为O(N^2)
    function reOrderArray(array) {
        let len =  array.length
        if(len<=0){
            return
        }
        for (let i = 0; i < len; i++){
            if(array[i] % 2 ==1){ //奇数
                let temp = array[i] 
                let j = i -1
                while(j >= 0 && array[j] % 2 == 0) { //找偶数
                    array[j+1] = array[j] //移动元素
                    j--
                }
                array[j+1] = temp //插入
            }
        }
        return array
    }

    第二种解法:冒泡排序 遇到奇数位置不变,遇到偶数向后移动 时间复杂度O(n^2)

    function reOrderArray(array) {
        let len =  array.length
        if(len<=0){
            return
        }
        
        for(let i = 0; i< len; i++){
            for(let j = 0; j <len-1; j++){
                if(array[j]%2 == 0 && array[j+1]%2 ==1){
                    let temp = array[j]
                    array[j] = array[j+1]
                    array[j+1] = temp
                }
            }
        }
        return array
    }
    let arr = [1,2,3,4,5]
    console.log(reOrderArray(arr))
    let test = [2,78,33,35,37,46]
    console.log(reOrderArray(test))
    不积跬步无以至千里
  • 相关阅读:
    面试题21 包含min函数的栈
    面试题20 顺时针打印矩阵
    基于熵的方法计算query与docs相似度
    使用信息检索和深度学习方法的智能对话
    常用的激活函数
    spark实现smote近邻采样
    wide&deep用于ltr排序
    deepfm用于ltr排序
    lightgbm用于排序
    静态工厂方法+服务提供者框架模板
  • 原文地址:https://www.cnblogs.com/lyt0207/p/12530610.html
Copyright © 2020-2023  润新知