Một câu hỏi phỏng vấn:Hoán đổi các phần tử của hai chuỗi, sao cho sự khác biệt của các phần tử tổng được tối thiểu.
Cho hai chuỗi số nguyên không ra lệnh
a
vàb
, kích thước của chúng là n, tất cả số được lựa chọn một cách ngẫu nhiên: Trao đổi các yếu tố củaa
vàb
, sao cho tổng của các yếu tố củaa
trừ đi tổng các phần tử củab
là tối thiểu.
Với ví dụ:
a = [ 5 1 3 ]
b = [ 2 4 9 ]
Kết quả là (1 + 2 + 3) - (4 + 5 + 9) = -12.
Thuật toán của tôi: Sắp xếp chúng lại với nhau và sau đó đặt nhỏ nhất đầu tiên n
ints trong a
và để lại trong b
. Nó là O (n lg n) trong thời gian và O (n) trong không gian. Tôi không biết làm thế nào để cải thiện nó thành một thuật toán với O (n) trong thời gian và O (1) trong không gian. O (1) có nghĩa là chúng ta không cần thêm không gian ngoại trừ seq 1 và 2.
Bất kỳ ý tưởng nào?
Một câu hỏi khác là: Nếu chúng ta cần giảm thiểu giá trị tuyệt đối của sự khác biệt (giảm thiểu |sum(a) - sum(b)|
) thì sao?
Tư duy python hoặc C++ được ưu tiên.
Âm thanh như một bài tập về nhà. Nếu có, vui lòng gắn thẻ cho phù hợp. – celtschk
Không thể là O (1) trong không gian nếu bạn xem danh sách a và b gốc. Nếu bạn không xem xét chúng, sau đó chỉ cần trao đổi các giá trị trực tiếp. Trong cả hai trường hợp, vui lòng cung cấp thêm chi tiết trong câu hỏi. – GaretJax
@GaretJax, Cách hoán đổi hiệu quả với thời gian O (n)? – user1002288