美文网首页算法
LCR 139. 训练计划 I

LCR 139. 训练计划 I

作者: 红树_ | 来源:发表于2023-10-09 11:14 被阅读0次

    越过一次次失败,却不丧失热情,才是成功的伟大秘诀。

    题目

    LC每日一题,参考LCR 139. 训练计划 I
    将所有奇数编号训练项目调整至偶数编号训练项目之前。

    • 例子
      输入:actions = [1,2,3,4,5]
      输出:[1,3,5,2,4] 为一个正确答案

    解题思路

    • 头尾插入:最先想到最简单的做法直接把数字从头尾重新分配到一个新数组。
    • 双指针:考虑用双指针遍历交换偶数和奇数,关键是找到左边的偶数和右边的奇数。
    • 头插入:优化头插入的空间复杂度,遇到奇数就和前面的下标交换,交换之后下标加一。

    头尾插入

    class Solution {
        fun trainingPlan(actions: IntArray): IntArray {
            // 明显可使用新数组头尾插入
            val n = actions.size; var ans = IntArray(n)
            var head = 0; var tail = n-1
            for(i in 0 .. n-1) {
                if(actions[i]%2 == 1) ans[head++] = actions[i]
                else ans[tail--] = actions[i]
            }
            return ans
        }
    }
    

    复杂度分析

    • 时间复杂度:O(n),一次循环遍历。
    • 空间复杂度:O(n),使用了新数组。

    双指针

    class Solution {
        fun trainingPlan(actions: IntArray): IntArray {
            // 使用双指针 进行交换
            val n = actions.size
            var i = 0; var j = n-1
            while(i < j) {
                while(actions[i]%2 == 1 && i < n-1) i++
                while(actions[j]%2 == 0 && j > 0) j--
                //此时左边是偶数 右边是奇数 直接交换
                if(i < j) {
                    val tmp = actions[j]
                    actions[j] = actions[i]
                    actions[i] = tmp
                }
            }
            return actions
        }
    }
    

    复杂度分析

    • 时间复杂度:O(n)
    • 空间复杂度:O(1)

    头插入

    class Solution {
        fun trainingPlan(actions: IntArray): IntArray {
            // 找到奇数插入到数组头部
            val n = actions.size
            var cur = 0
            for(i in 0 until n){
                if(actions[i]%2 == 1 && i > cur) { // 把该奇数放到头部
                    val tmp = actions[i]
                    actions[i] = actions[cur]
                    actions[cur] = tmp
                    cur ++
                }
            }
            return actions
        }
    }
    

    复杂度分析

    • 时间复杂度:O(n)
    • 空间复杂度:O(1)

    2023.10.10

    相关文章

      网友评论

        本文标题:LCR 139. 训练计划 I

        本文链接:https://www.haomeiwen.com/subject/pnjibdtx.html