LeetCode26
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:
更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
返回 k 。
思路
因为为非严格递增排列数组,可以考虑判断后一个元素是否与同一个元素相同,如果相同,则去掉后一个元素,这样可以实现原地删除
代码
class Solution(object):def removeDuplicates(self, nums):""":type nums: List[int]:rtype: int"""if not nums:return 0i=0for i in range(len(nums)-1):if nums[i]==nums[i+1]:del nums[i+1]return len(nums)
LeetCode283
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
思路
代码
class Solution(object):def moveZeroes(self, nums):""":type nums: List[int]:rtype: None Do not return anything, modify nums in-place instead."""left=0for right in range (len(nums)):if nums[right]!=0:nums[left],nums[right]=nums[right],nums[left]left +=1# print(right)return nums
LeetCode 485
给定一个二进制数组 nums , 计算其中最大连续 1 的个数。
思路
代码
class Solution(object):def findMaxConsecutiveOnes(self, nums):""":type nums: List[int]:rtype: int"""count=0totalcount=0for num in nums:if num==1:count=count+1else:count=0if count>totalcount:totalcount=countreturn totalcount
LeetCode 27
思路
代码
class Solution(object):def removeElement(self, nums, val):""":type nums: List[int]:type val: int:rtype: int"""if nums is None or len(nums) ==0:return 0l,r = 0,len(nums)-1 #一开始,l指向最左边,R指向最右边while l < r:while l<r and nums[l] != val: l = l+1while l<r and nums[r] == val:r = r-1nums[l],nums[r] = nums[r],nums[l]return l if nums[l] == val else l+1