算法

LCR 139. 训练计划 I

2023-10-09  本文已影响0人  红树_

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

题目

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

解题思路

头尾插入

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
    }
}

复杂度分析

双指针

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
    }
}

复杂度分析

头插入

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
    }
}

复杂度分析

2023.10.10

上一篇 下一篇

猜你喜欢

热点阅读