ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

leetcode 热题100 (283.移动零)

leetcode 热题100 (283.移动零) 一、双指针知识点一句话总结就是用位置信息代替暴力扫描。双指针实际上算不得是算法只能说是一种算法技巧。一般来说是有两种表现形式两边有序想夹逼 → 左右对撞一趟扫原地改 → 快慢同跑举两个例子1、夹逼# 有序数组找两数之和 9a[1,3,5,8,11]l,r0,len(a)-1whilelr:sa[l]a[r]ifs9:print(a[l],a[r]);breakelifs9:r-1# 太大右边往左收else:l1# 太小左边往右走2、快慢同跑# 已排序删重复只留一个a[1,1,2,2,3]slow0forfastinrange(1,len(a)):ifa[fast]!a[slow]:slow1a[slow]a[fast]print(a[:slow1])# [1,2,3]二、题目给定一个数组 nums编写一个函数将所有 0 移动到数组的末尾同时保持非零元素的相对顺序。请注意 必须在不复制数组的情况下原地对数组进行操作。示例 1:输入: nums [0,1,0,3,12]输出: [1,3,12,0,0]示例 2:输入: nums [0]输出: [0]三、我的解法classSolution:defmoveZeroes(self,nums:list[int])-None:j0foriinrange(len(nums)):ifnums[i]!0:nums[j],nums[i]nums[i],nums[j]j1print(nums)我这个解法主要借鉴了上述快慢指针的写法就是这个代码# 已排序删重复只留一个a[1,1,2,2,3]slow0forfastinrange(1,len(a)):ifa[fast]!a[slow]:slow1a[slow]a[fast]print(a[:slow1])# [1,2,3]但是我的代码有个问题题目明确了不需要返回数据所以print不需要。所以正确代码应该如下:classSolution:defmoveZeroes(self,nums:list[int])-None:j0foriinrange(len(nums)):ifnums[i]!0:nums[j],nums[i]nums[i],nums[j]j1今天做题意外顺利呢下次再接再啦
返回列表