📅  最后修改于: 2023-12-03 15:01:49.165000             🧑  作者: Mango
在一个排序的数组中,如果一个数字出现的次数超过数组长度的一半,则这个数字就是数组中的多数元素。编写一个函数来检查一个排序数组中是否存在多数元素。
要找到多数元素,我们需要遍历整个数组,记录每个数字出现的次数。我们可以使用一个对象来记录每个数字的出现次数。遍历完数组后,我们可以再次遍历对象,找到出现次数超过数组长度一半的数字。
这个方法的时间复杂度为 O(n),空间复杂度为 O(n)。
function majorityElement(nums) {
const count = {};
const half = Math.floor(nums.length / 2);
for (let num of nums) {
if (count[num]) {
count[num]++;
} else {
count[num] = 1;
}
if (count[num] > half) {
return num;
}
}
return null;
}
在这个代码中,我们首先创建了一个空对象 count
。然后遍历整个数组,以数字 num
作为键,存储每个数字出现的次数。每当我们遇到一个数字,我们将其数值加一。如果一个数字的计数超过数组长度的一半,我们返回这个数字。如果在循环结束后还没有找到多数元素,我们返回 null。
const nums = [1, 1, 2, 2, 2, 2, 3, 4, 5, 5, 5, 5, 5, 5, 5];
const majority = majorityElement(nums);
console.log(majority); // 输出 5
在这个例子中,我们使用了一个包含了多数元素的数组。我们传入这个数组到 majorityElement
函数中,然后打印出函数返回值。函数返回了正确的多数元素 5。
我们可以使用一个对象来记录每个数字出现的次数,并在遍历过程中查找多数元素。这个方法虽然时间复杂度为 O(n),但需要 O(n) 的空间复杂度。