Przeglądaj źródła

#feat:leetcode p169题题解

yangyi 2 tygodni temu
rodzic
commit
659fc97b15

+ 58 - 0
src/leetcode/p169/Solution.java

@@ -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;
+    }
+}

+ 29 - 0
src/leetcode/p169/SolutionTest.java

@@ -0,0 +1,29 @@
+package leetcode.p169;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @ProjectName: LeetCode
+ * @FileName: SolutionTest
+ * @Author: 杨逸
+ * @Data:2026/3/3 19:22
+ * @Description:
+ */
+public class SolutionTest {
+
+    @Test
+    public void majorityElement() {
+        Solution solution = new Solution();
+        int[] nums = {3,2,3};
+        int result = solution.majorityElement(nums);
+        assertEquals(3, result);
+        nums = new int[]{2,2,1,1,1,2,2};
+        result = solution.majorityElement(nums);
+        assertEquals(2, result);
+        nums = new int[]{6,6,6,7,7};
+        result = solution.majorityElement(nums);
+        assertEquals(6, result);
+    }
+}