|
|
@@ -0,0 +1,58 @@
|
|
|
+package leetcode.p169;
|
|
|
+
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Iterator;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @ProjectName: LeetCode
|
|
|
+ * @FileName: Solution
|
|
|
+ * @Author: 杨逸
|
|
|
+ * @Data:2026/3/3 19:16
|
|
|
+ * @Description: https://leetcode.cn/problems/majority-element/description/?envType=study-plan-v2&envId=top-100-liked
|
|
|
+ * 169. 多数元素
|
|
|
+ */
|
|
|
+public class Solution {
|
|
|
+ /**
|
|
|
+ * 因为多数元素的个数大于 n/2
|
|
|
+ * 所以假设数组中只存在两种元素,那么多数元素一定比其他元素多,假设数组第一个元素为多数元素,初始化count为1,遍历数组与当前元素相同则count++,否则count--,count为0时更新多数元素,最后剩下的就是多数元素
|
|
|
+ * @param nums
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public int majorityElement(int[] nums) {
|
|
|
+ int result = nums[0];
|
|
|
+ int count = 1;
|
|
|
+ for (int i = 1; i < nums.length; i++) {
|
|
|
+ int num = nums[i];
|
|
|
+ if (count == 0) {
|
|
|
+ result = num;
|
|
|
+ count++;
|
|
|
+ } else if (num == result) {
|
|
|
+ count++;
|
|
|
+ }else{
|
|
|
+ count--;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ private int hashMapSolution(int[] nums) {
|
|
|
+ int targetCount = nums.length / 2;
|
|
|
+ int result = 0;
|
|
|
+ HashMap<Integer, Integer> map = new HashMap<>();
|
|
|
+ for (int num : nums) {
|
|
|
+ Integer count = map.getOrDefault(num, 0);
|
|
|
+ map.put(num, count + 1);
|
|
|
+ }
|
|
|
+ Set<Map.Entry<Integer, Integer>> entries = map.entrySet();
|
|
|
+ Iterator<Map.Entry<Integer, Integer>> iterator = entries.iterator();
|
|
|
+ while (iterator.hasNext()) {
|
|
|
+ Map.Entry<Integer, Integer> entry = iterator.next();
|
|
|
+ if (entry.getValue() > targetCount) {
|
|
|
+ result = entry.getKey();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+}
|