วันนี้เป็นวันที่ 52 ของการเขียนโค้ดของฉัน วันนี้ฉันตอบคำถามหนึ่งข้อ
ปัญหา: เมื่อพิจารณาอาร์เรย์ขนาด n และตัวเลข k ให้ค้นหาองค์ประกอบทั้งหมดที่ปรากฏมากกว่า “ n/k “ ครั้ง
เมื่อกำหนดอาร์เรย์จำนวนเต็มขนาด n
ให้ค้นหาองค์ประกอบทั้งหมดที่ปรากฏมากกว่า ⌊ n/3 ⌋
ครั้ง
ตัวอย่างที่ 1:
Input: nums = [3,2,3] Output: [3]
ตัวอย่างที่ 2:
Input: nums = [1] Output: [1]
ตัวอย่างที่ 3:
Input: nums = [1,2] Output: [1,2]
ข้อจำกัด:
1 <= nums.length <= 5 * 104
-109 <= nums[i] <= 109
ติดตามผล: คุณช่วยแก้ปัญหาในเวลาเชิงเส้นและในปริภูมิ O(1)
ได้ไหม
โซลูชัน (ใน java):
class Solution { public List<Integer> majorityElement(int[] nums) { List<Integer> a= new ArrayList<>(); HashMap<Integer, Integer> res= new HashMap<Integer, Integer>(); for(int i=0; i<nums.length; i++){ res.put(nums[i], res.getOrDefault(nums[i], 0) + 1 ); } for( int x: res.keySet()){ if(res.get(x)> (nums.length / 3 )) a.add(x); } return a; } }