Javascript 为什么排序数组中的中间元素是多数元素?

Javascript 为什么排序数组中的中间元素是多数元素?,javascript,arrays,Javascript,Arrays,我在leetcode工作 我看到了一个我无法理解的解决方案 它说“排序数组,中间是多数” 我想问的是 “为什么排序数组中的中间元素是多数元素?” 有人能解释一下吗 本问题的要求: 给定一个大小为n的数组,找到多数元素。“多数”元素是显示超过个的元素⌊ n/2⌋ 时代 您可以假设数组是非空的,并且多数元素始终存在于数组中 以下是答案的代码: var-majorityElement=函数(nums){ //对数组进行排序,中间是多数 nums.sort((a,b)=>a-b); 返回nums[数学楼

我在leetcode工作

我看到了一个我无法理解的解决方案

它说“排序数组,中间是多数”

我想问的是

“为什么排序数组中的中间元素是多数元素?”

有人能解释一下吗

本问题的要求:

给定一个大小为n的数组,找到多数元素。“多数”元素是显示超过个的元素⌊ n/2⌋ 时代

您可以假设数组是非空的,并且多数元素始终存在于数组中

以下是答案的代码:
var-majorityElement=函数(nums){
//对数组进行排序,中间是多数
nums.sort((a,b)=>a-b);
返回nums[数学楼层(nums.长度/2)];
}; 
日志(majorityElement([3,2,3]))

log(多数元素([2,2,1,1,1,1,2,2]))
假设输入的数组有一个多数元素,它将在数组中至少出现
(n/2)+1次。如果多数元素是数组中的最小数,则排序后的数组将如下所示:

MMMMXX
  ^^ mid (even)
XXMMMM
  ^^ mid (even)

其中,
M
是多数元素,X表示任何其他元素。如您所见,
M
将始终位于阵列的中间。如果多数元素是数组中的最大数,则它看起来像:

MMMMXX
  ^^ mid (even)
XXMMMM
  ^^ mid (even)

<代码> m <代码>仍在中间。

如果<代码> m <代码>不是数组中最高的元素,也不是代码中的最低元素,那么无论您如何尝试改变范围:

,排序的数组在中间仍将有<代码> M<代码> > >
XXMMMM
XMMMMX
MMMMXX
  ^^


这些示例仅适用于长度为6和7的数组,但相同的想法适用于任何大小的数组。

我的理解如下

相反,假设中间元素不是多数元素。 因此,多数元素要么在中间元素的右边,要么在中间元素的左边。 有
⌊ n/2⌋左侧的元素和
n-⌊ n/2⌋右侧的元素


因为多数元素是比
⌊ n/2⌋
次,它不能仅位于中间元素的左侧或右侧,因为两侧都是
。原因是数组中有一个元素出现超过n/2次。在对数组排序之后。然后将通过中点,这就是为什么它们返回索引n/2处的值

我认为您错过了计数多数元素总是超过元素的一半(n/2)
XXXMMMM
XXMMMMX
XMMMMXX
MMMMXXX
   ^