力扣 多数元素

用了排序跟抵消。

题目

由题可知,多数元素是指在数组中出现次数大于一半的元素,且总是存在多数元素。不难想到,把数组排序后,这个数组的中间数一定是这个要找的元素。

用了sort排序,时间复杂度O(nlogn),空间复杂度O(1)。

class Solution {
    public int majorityElement(int[] nums) {
        Arrays.sort(nums);
        // return nums[nums.length / 2];
        return nums[nums.length >>1];
    }
}

然后,也可以用抵消的思路,类似投票候选人,记要找的元素为1,其它元素为-1,这样累加下来肯定是为1的,然后就是通过前面几个数作抵消,当剩余那个数即找到候选人,也是要找的元素了。

时间复杂度O(n),空间复杂度O(1),相对更快一点。

class Solution {
    public int majorityElement(int[] nums) {
            int count = 0, candidate = 0;
    for (int num : nums) {
        if (count == 0) {
            candidate = num;
        }
        count += (num == candidate) ? 1 : -1;
    }
    return candidate;
  }  
}

一题多解,转变思路很重要。 

 

上一篇:电子商务系统设计与Spring Boot框架


下一篇:C# yolo10使用onnx推理