有两种思路: 1.最简单就是使用hashMap,循环遍历,将每个数字的值和次数作为key 和value保存到map中,最后循环遍历map,取出value,大于数组长度的一半就输出, 这样空间复杂度就很大,引入了额外的内存
import java.util.*;
public class Solution {
public int MoreThanHalfNum_Solution(int [] arr) {
if(arr.length==0){
return 0;
}
int time =1;
HashMap<Integer, Integer> hashMap = new HashMap<Integer,Integer>();
for (int i = 0; i < arr.length; i++) {
if(hashMap.containsKey(arr[i])){
time = hashMap.get(arr[i]);
hashMap.put(arr[i], ++time);
}else{
hashMap.put(arr[i], 1);
}
time = hashMap.get(arr[i]);
if(time>arr.length/2){
return arr[i];
}
}
return 0;
}
}
2. 第二种思路就是,数组中这个数字出现的次数超过了总数的一半,也就是说他比其他所有数字出现的总次数还要多,那么我们可以考虑在遍历数组的时候保存两个值,一个数数组中的数字,一个是次数,当我们遍历到下一个数字的时候,如果下一个数字和我们之前保存的数字相同,次数就+1,如果不同,我们就将次数-1,当次数为0的时候,我们保存下一个数字,并将他的次数设为1
import java.util.*;
public class Solution {
public int MoreThanHalfNum_Solution(int [] arr) {
if(arr.length==0){
return 0;
}
int time = 1; //次数
int result = arr[0];
int count = 0;
for (int i = 1; i < arr.length; i++) {
if(time==0){
result = arr[i];
time = 1;
}else if(arr[i]==result){
time++;
}else{
time--;
}
}
for (int i = 0; i < arr.length; i++) {
if(arr[i]==result){
count++;
}
}
if(count>arr.length/2){
return result;
}else{
return 0;
}
}
}
`````` **有两种思路: 1.最简单就是使用hashMap,循环遍历,将每个数字的值和次数作为key 和value保存到map中,最后循环遍历map,取出value,大于数组长度的一半就输出, 这样空间复杂度就很大,引入了额外的内存 2. 第二种思路就是,数组中这个数字出现的次数超过了总数的一半,也就是说他比其他所有数字出现的总次数还要多,那么我们可以考虑在遍历数组的时候保存两个值,一个数数组中的数字,一个是次数,当我们遍历到下一个数字的时候,如果下一个数字和我们之前保存的数字相同,次数就+1,如果不同,我们就将次数-1,当次数为0的时候,我们保存下一个数字,并将他的次数设为1**import java.util.*;public class Solution { public int MoreThanHalfNum_Solution(int [] arr) { if(arr.length==0){return 0; } int time = 1; //次数int result = arr[0];int count = 0; for (int i = 1; i < arr.length; i++) { if(time==0){result = arr[i]; time = 1; }else if(arr[i]==result){time++; }else{time--; }} for (int i = 0; i < arr.length; i++) { if(arr[i]==result){count++; } }if(count>arr.length/2){return result; }else{return 0; }}}``````