当前位置: 首页 > 后端技术 > Python

力扣-0665.非递减数组[Python]

时间:2023-03-26 19:40:22 Python

LeetCode0665.非递减数组[Easy][Python][Greedy]最多1个元素。如果array[i]<=array[i+1]对每个i(1<=inums[i+1]时,nums1变大,nums2变小。仅进行一项更改后退出。然后将nums1与排序后的nums1进行比较,将nums2与排序后的nums2进行比较,如果两者相等则返回True。时间复杂度:O(len(nums))空间复杂度:O(len(nums))方法两条countercnt记录,遍历nums,当nums[i]>nums[i+1]时,给cnt加一,则有两种情况,一种是变小,一种是变小。具体可以参考下面的代码注释。时间复杂度:O(len(nums))空间复杂度:O(1)Python代码classSolution(object):defcheckPossibility(self,nums):""":typenums:List[int]:rtype:bool"""##解决方案一#iflen(nums)<=2:#returnTrue#nums1,nums2=nums[:],nums[:]#foriinrange(len(nums)-1):#ifnums[i]>nums[i+1]:#nums1[i]=nums[i+1]#变大#nums2[i+1]=nums[i]#变小#break#只改变一次,然后break#returnnums1==sorted(nums1)ornums2==sorted(nums2)#解决方案二iflen(nums)<=2:returnTruecnt=0foriinrange(1,len(nums)):ifnums[i-1]>nums[i]:cnt+=1如果i==1或nums[i-2]<=nums[i]:#3,5,4->3,4,4nums[i-1]=nums[i]否则:#4,5,4->4,5,5nums[i]=nums[i-1]ifcnt>1:returnFalsereturnTrue代码地址github链接