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