@ninijiaLeetcode每日一题练习 ------ 3011. 判断一个数组是否可以变为有序 中发帖

从Leetcode 每日一题练习继续讨论: 
3011. 判断一个数组是否可以变为有序
3011. Find if Array Can Be Sorted
题解
本题要求从小到大排列数组,对于包含个数相同的1的连续数字,这些数字之间总可以通过不断的相邻交换最终从小到大排列。因此我们不必关心这些数字具体的排序方式,只需记录连续数字中值最大的那个,当遇到新的一组包含不同个数1的数字时只需该组数字中最小值大于前面组数字的最大值数组整体即可完成排序,若小于最大值则由于该数字包含的1的个数和前面的数字不同,该数字不可能与前面的数字交换位置,因此该数字不可能交换到数组的前面,此时就无法成功排序。
统计某个数字n中包含的二进制1的个数,可以使用n&(n-1),n&(n-1)每次可以消掉一个尾部所有0之前的第一个二进制1,通过不断的进行n&(n-1)的变换,记录变换的次数,当n为0时变换的次数即为该...