题目链接
我的思想:
两重循环遍历,代码如下,但是耗时
class Solution {
public int majorityElement(int[] nums) {
int n = nums.length;
for(int i = 0; i < n; i++){
int x = 1;
for(int j = i + 1; j < n; j++){
if(nums[j] == nums[i]){
x++;
}
}
if(x > n / 2){
return nums[i];
}
}
return 0;
}
}
太晚了,官方题解明早更…
2023/8/26晚更
看了题解的hashmap的方法,但是感觉太复杂
王xx跟我说了他这题的思想
我把它写了出来
大体思想:
- 设置两个变量 num 和 count
- num表示遍历到当前出现次数最多的元素
- count表示遍历到当前出现次数最多的元素的次数减去其它元素出现的次数
- 遍历到最后,count肯定是大于0的
- 那么num就是出现次数最多的元素
class Solution {
public int majorityElement(int[] nums) {
int num = nums[0];
int count = 1;
for(int i = 1; i < nums.length; i++){
if(count == 0){
num = nums[i];
}
if(nums[i] == num){
count++;
}
else if(nums[i] != num){
count--;
}
// System.out.printf("%d,%d\n",num,count);
}
return num;
}
}