Cho các mảng N có sizeof N và tất cả đều được sắp xếp, nếu nó không cho phép bạn sử dụng thêm không gian, cách tìm dữ liệu chung một cách hiệu quả hoặc ít phức tạp hơn ?Tìm các phần tử phổ biến trong N mảng được sắp xếp không có khoảng trống thừa
Đối với ví dụ:
1. 10 160 200 500 500
2. 4 150 160 170 500
3. 2 160 200 202 203
4. 3 150 155 160 300
5. 3 150 155 160 301
Đây là một câu hỏi phỏng vấn, tôi thấy một số câu hỏi mà là tương tự nhưng họ không bao gồm các điều kiện thêm đầu vào được sắp xếp hoặc không thể sử dụng thêm bộ nhớ.
Tôi không thể nghĩ ra bất kỳ giải pháp nào nhỏ hơn độ phức tạp O (n^2 lg n). Trong trường hợp đó, tôi muốn đi với các giải pháp đơn giản nhất mà mang lại cho tôi sự phức tạp này, đó là:
not_found_flag = false
for each element 'v' in row-1
for each row 'i' in the remaining set
perform binary search for 'v' in 'i'
if 'v' not found in row 'i'
not_found_flag = true
break
if not not_found_flag
print element 'v' as it is one of the common element
Chúng ta có thể cải thiện điều này bằng cách so sánh min và max của mỗi hàng và quyết định trên cơ sở đó cho dù đó có thể cho một số 'num' nằm giữa 'min_num' và 'max_num' của hàng đó.
tìm kiếm nhị phân -> O (log n) Đối với tìm kiếm 1 num trong n-1 hàng: O (nlogn) Binary tìm kiếm mỗi số trong hàng đầu tiên: O (n2logn)
tôi chọn hàng đầu tiên , chúng tôi có thể chọn bất kỳ hàng nào và nếu không có phần tử nào của hàng được chọn được tìm thấy trong bất kỳ hàng nào (N-1) thì chúng tôi không thực sự có dữ liệu chung.
bạn cần thêm một số khoảng trống để lưu trữ các phần tử phổ biến (có thể) ... –
@M itchWheat. Hãy nhìn vào mã giả ở trên. Nếu chúng ta tốt với chỉ in các yếu tố chung, chúng ta có thực sự cần thêm dung lượng không? – user1071840
Bạn có thực sự tiết kiệm bất cứ điều gì bằng cách tìm kiếm nhị phân .. vì bạn cần phải tìm tất cả các yếu tố phổ biến, tại sao bạn không chỉ quét mảng được sắp xếp và được thực hiện trong O (n) – smk