题目 |
题目传送门:传送门(点击此处)
题解 |
思路
题目得时间复杂度肯定不小于n,所有得元素必须要遍历一遍之后才能知道结果
- 比较简单想到的就是
哈希表
,存储好当前得值出现得次数即可,时间复杂度为O(n)
,空间复杂度也为O(n)
- 因为题目给出了务必有这个数字,所以先排序再取
n/2
处得值即为所求,时间复杂度为O(nlogn)
,空间复杂度为O(1)
code
solution1
class Solution {
public int majorityElement(int[] nums) {
if(nums.length==1) return nums[0];
HashMap<Integer, Integer> hashMap = new HashMap<>();
for (int num : nums) {
if (hashMap.containsKey(num)) {
int temp = hashMap.get(num);
if (++temp > nums.length / 2) return num;
else hashMap.put(num, temp);
} else {
hashMap.put(num, 1);
}
}
return -1;
}
}
solution2
class Solution {
public int majorityElement(int[] nums) {
Arrays.sort(nums);
return nums[nums.length/2];
}
}