【刷题日记】905. 按奇偶排序数组

简介: 本次刷题日记的第 46 篇,力扣题为:905. 按奇偶排序数组 ,简单

【刷题日记】905. 按奇偶排序数组

本次刷题日记的第 46 篇,力扣题为:905. 按奇偶排序数组简单

一、题目描述:

image.png

加班的日子里刷一个简单题也显的那么不太和谐,但是还是要继续刷下去,哪怕是个简单题,也要记录一波,加牛


二、这道题考察了什么思想?你的思路是什么?

题目描述比较少,咱们也同样来看看题目都给我们说了哪些重要的信息:

  • 题目中给出了一个数组,数组中的元素全部都是整数,有奇数,有偶数,位置是错乱的
  • 题目要求我们将偶数移动到数组的前面位置,奇数移动到数组的后半段

稍微分析一下这个题,其实可以有很多种方式,很容易想到的方式其实就是,

  • 开辟一个数组,和题目给出的的数组长度一致,遍历 1 次原数组,找出偶数全部 append 到 结果数组中,然后再遍历 1 次原数组,找出奇数全部 append 到 结果数组中

但是这种方式会遍历 2 次原数组,有点不聪明的鸭子

那么我们也可以想一下,如何减少循环?

  • 我们同样开辟一个和原数组一样长度的数组,只用遍历一次原数组,将偶数加入到数组头,将奇数加入到数组尾巴就可以了

当然处理这种题的方式有很多,每一种方式都可以尝试一下,逐步优化,慢慢的对于不同的题目,思维就不会那么僵化,就能活学活用了

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码

编码如下:需要注意对于奇数和偶数的摆放位置,别弄反了,以及不要越界

func sortArrayByParity(nums []int) []int {
    n := len(nums)
    // 开辟一个和原数组同样空间的数组
    ans := make([]int, n)
    left, right := 0, n-1
    for _, num := range nums {
        // 如果是偶数,就放在数组的前面
        if num%2 == 0 {
            ans[left] = num
            left++
        } else {
            // 如果是基数就放在数组的后面
            ans[right] = num
            right--
        }
    }
    return ans
}


根据编码的话就分两条路,遍历数组的时候,验证是奇数还是偶数,奇数走后面,偶数走前面,最终得到一个结果数组,直接返回即可

四、总结:

按照这种编码方式,时间复杂度就很明确了, 为 O(n) ,因为咱们的只遍历了一次数组

空间复杂度的话是看上去明明是开辟了一个 长度为 n 的数组,那么应该是 O(n) 才对,但是这个数组是作为结果返回的,因此不会计入空间复杂度,则此处的空间复杂度是 O(1)

原题地址:905. 按奇偶排序数组

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~



相关文章
|
5天前
|
算法 容器
OJ刷题日记:2、双指针(2)
OJ刷题日记:2、双指针(2)
17 0
|
5天前
|
算法 索引
OJ刷题日记:5、二分查找(1)
OJ刷题日记:5、二分查找(1)
21 0
|
5天前
|
算法 测试技术
OJ刷题日记:1、双指针(1)
OJ刷题日记:1、双指针(1)
19 0
|
9月前
|
算法 C语言 C++
Leetcode 每日一题 2341. 数组能形成多少数对
返回一个下标从 0 开始、长度为 2 的整数数组 answer 作为答案,其中 answer[0] 是形成的数对数目,answer[1] 是对 nums 尽可能执行上述操作后剩下的整数数目。
28 0
|
10月前
|
算法 测试技术 Cloud Native
【刷题日记】2104. 子数组范围和
对于很久没有刷题的我来说,突然开始也开始刷题了,不为别的,已经习惯参与掘金的活动了,同时也可以促进自己再回顾一下算法题,毕竟长时间不练,真的就生疏了
|
10月前
|
索引 Cloud Native
【刷题日记】152. 乘积最大子数组
【刷题日记】152. 乘积最大子数组
|
10月前
|
Cloud Native
【刷题日记】64. 最小路径和
本次刷题日记的第 39 篇,力扣题为:64. 最小路径和 ,中等
|
10月前
|
索引 Cloud Native
【刷题日记】954. 二倍数对数组
本次刷题日记的第 21 篇,力扣题为:954. 二倍数对数组 ,中等