【LeetCode】905. 按奇偶排序数组

165 阅读2分钟

image.png

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第28天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

image.png

  • 题目示例

image.png

  • 题目解析

    • 本题只有一个参数nums列表。元素都是整数类型
    • nums列表长度在1~5000
    • nums[i] 范围在 0~5000

二、思路分析:

我们拿到本题,读取题意后要求对nums列表中的元素是偶数排到列表前面,奇数元素排到列表后面。

查看题目示例,nums列表元素排序的结果可能存在多种情况,只用输出其中一个即可。 比如示例1,nums=[3,1,2,4] 那么输出[2,4,1,3],[4,2,1,3],[4,2,3,1]都是正确答案。

因此,解答该题我们只需要对nums元素进行排序即可,排序的方法多种。

  • 方法一:一头一尾双指针交换

    • 定义 left 和 right 指针,分别指向nums列表的起始位置
    • 当nums[left] % 2 ==0 时,代表元素是偶数,无需要移到位置,left+1
    • 当nums[right] %2 !=0 时,代表元素是奇数,无需要移到位置,right-1
    • 当nums[left] % 2 !=0 并且 nums[right] == 0 时,需要将num[left] 与 nums[right]交换位置
    • 直到left大于right时,结束程序输出nums列表 image.png 根据以上思路,使用Python很容易实现,代码如下:
     class Solution(object):
         def sortArrayByParity(self, nums):
             """
             :type nums: List[int]
             :rtype: List[int]
             """
    
             left = 0
             right = len(nums) -1
    
             while left < right:
    
                 if nums[left] % 2 ==0:
    
                     left = left + 1
    
                 if nums[right] % 2 == 0 and nums[left] % 2 !=0:
    
                     nums[left] , nums[right] = nums[right] , nums[left]
    
                     left = left + 1
    
                 if nums[right] % 2  !=0:
    
                     right = right -1
    
             return nums   
    
    
  • 方法二:同步双指针交换

    • 定义两个双指针,i和tmp初始分别都指向nums[0]位置
    • for循环遍历,取出nums[start] 元素判断是否为偶数
    • 如果为偶数,则nums[i] 与 nums[tmp] 进行交换
      class Solution(object):
          def sortArrayByParity(self, nums):
              """
              :type nums: List[int]
              :rtype: List[int]
              """
      
              tmp = 0
      
              for i in range(len(nums)):
      
                  if nums[i] % 2 ==0:
      
                      nums[tmp],nums[i] = nums[i],nums[tmp]
                      tmp = tmp + 1
      
              return nums
      
  • 方法三:sort()排序

    • 使用Python sort函数轻松解决

      return sorted(nums, key=lambda x: 0 if x % 2 == 0 else 1)
      

三、总结:

本题考察的是双指针使用,AC提交记录如下:

image.png

时间复杂度O(n),n为nums列表的长度

空间复杂度O(1),没有使用额外空间

以上是本期内容,欢迎大佬们点赞评论,下期见~~