Skip to main content
  1. Posts/

LeetCode-3011 判断一个数组是否可以变为有序

·1 min·

LeetCode-3011 判断一个数组是否可以变为有序 #

Solution1 #

一次操作只有对相邻且二进制下 $1$ 的数量相同的元素才能进行, 实际上可以操作的数组是一段段连续的子数组. 对每一段连续的子数组进行排序, 检查排序后的数组是否有序. 代码如下:

class Solution:
    def canSortArray(self, nums: List[int]) -> bool:
        n = len(nums)
        i = 0 
        while i < n:
            k = nums[i].bit_count()
            i += 1
            while i < n and nums[i].bit_count() == k:
                i += 1
            nums[start: i] = sorted(nums[start: i])
        retrun all([x <= y for x, y in pairwise(nums)])

这里分组循环的写法来自灵神的题解 教你一次性把代码写对!O(n) 分组循环(Python/Java/C++/Go).