LeetCode-3011 判断一个数组是否可以变为有序
Table of Contents
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).