- vừa được xem lúc

Tìm ra phần tử phổ biến nhất - 2 ways

0 0 1

Người đăng: Minhion

Theo Viblo Asia

Tìm ra phần tử phổ biến nhất

The majority element is the element that appears more than ⌊n / 2⌋ times. You may assume that the majority element always exists in the array.

Đề bài:

Cho 1 mảng gồm n phần tử, trả về phần tử xuất hiện hơn (n/2) lần, cho rằng phần tử đó luôn tồn tại.

cách 1: Sort table

Hướng tiếp cận:

  • Đơn giản thôi, chúng ta sẽ sort mảng đã cho và trả về phần tử ở vị trí n/2

Time complexity: O(n)

Space complexity: O(1)

Code

def majorityElement(self, nums: List[int]): nums.sort() return nums[len(nums) // 2]

Cách 2: hashmap ( or hashtable)

Hướng tiếp cận:

Chúng ta sẽ sử dụng 1 hash map để chứa đựng frequency của các phần tử trong nums. Sau đó duyệt qua hash map và trả về phần tử xuất hiện nhiều nhất trong mảng.

time complexity: O(n)

Space complexity: O(n)

Code

def majorityElement(self, nums: List[int]) -> int: nums_frequency = {} for ele in nums: nums_frequency[ele] = nums_frequency.get(ele, 0) + 1 for key,value in nums_frequency.items(): if value > len(nums)/2: return key return 0

Cách 3: Moore voting algorithm

Hướng tiếp cận:

Chúng ta có thể nhìn nhập rằng, nếu phần từ xuất hiện hơn n/2 lần thì khi lấy tổng số frequency của phần tử này trừ đi cho các phần tử còn lại. chúng ta luôn được số nguyên dương.

Time complexity: O(n)

Space complexity: O(1)

Code

def majorityElement(self, nums: List[int]) -> int: candidate = 0 count = 0 for num in nums: if count == 0: candidate = num if num == candidate: count += 1 else: count -= 1 return candidate

Test

input

[3,2,3]

Output

3

image.png

Input

[5]

Output

5

image.png

Input

[8,8,3,5,8]

Output

8

image.png Ref: https://leetcode.com/problems/majority-element/description/

Bình luận

Bài viết tương tự

- vừa được xem lúc

Thuật toán quay lui (Backtracking)

Quay lui là một kĩ thuật thiết kế giải thuật dựa trên đệ quy. Ý tưởng của quay lui là tìm lời giải từng bước, mỗi bước chọn một trong số các lựa chọn khả dĩ và đệ quy.

0 0 51

- vừa được xem lúc

Các thuật toán cơ bản trong AI - Phân biệt Best First Search và Uniform Cost Search (UCS)

Nếu bạn từng đọc các thuật toán trong AI (Artificial Intelligence - Trí tuệ nhân tạo), rất có thể bạn từng nghe qua về các thuật toán tìm kiếm cơ bản: UCS (thuộc chiến lược tìm kiếm mù) và Best First Search (thuộc chiến lược tìm kiếm kinh nghiệm). Khác nhau rõ từ khâu phân loại rồi, thế nhưng hai th

0 0 169

- vừa được xem lúc

Sử dụng vector trong lập trình C++ - giải bài toán lập trình muôn thủa

Chào buổi tối mọi người, hôm nay lang thang trên mạng bắt gặp bài toán quen thuộc một thời của quãng đường sinh viên IT. Đấy chính là câu số 1 trong đề thi dưới đây:.

0 0 60

- vừa được xem lúc

MÔ PHỎNG THUẬT TOÁN VƯƠNG HẠO TRONG PROLOG

. 1. Các luật suy diễn trong thuật toán Vương Hạo. Luật 1: Chuyển vế các giả thuyết và kết luận ở dạng phủ định. Ví dụ: p v q, !(r ^ s), !q, p v r -> s, !p <=> p v q, p v r, p -> s, r ^ s, q.

0 0 91

- vừa được xem lúc

A* Search Algorithm

What is A* Search Algorithm. How it works. . Explanation.

0 0 58

- vừa được xem lúc

Python: Jump Search

Search là một từ khóa khá là quen thuộc đối với chúng ta. Hiểu theo đúng nghĩa đen của nó chính là "Tìm kiếm".

0 0 50