一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第28天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题只有一个参数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列表
根据以上思路,使用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提交记录如下:
时间复杂度O(n),n为nums列表的长度
空间复杂度O(1),没有使用额外空间
以上是本期内容,欢迎大佬们点赞评论,下期见~~