thể trùng lặp:
Check if array B is a permutation of AHai mảng này có hoán vị nhau không?
Với 2 mảng số nguyên được phân loại a
và b
kích thước bằng nhau. Xác định nếu b
là một hoán vị của a
. Điều này có thể được thực hiện trong O(n) time
và O(1) space
không?
Giải pháp đầu tiên xuất hiện trong đầu tôi là sử dụng XOR
, tức là XOR all the elements of a and b and if the resultant is 0 which means that b is a permutation of a
. Nhưng ông đưa ra những ví dụ mà cách tiếp cận này không thành công. Đối với ví dụ -
a: [1 6 0 0 4] -- b: [1 0 6 1 5]
a: [1 6 0 0 5] -- b: [1 0 6 1 4]
Bất kỳ một có bất kỳ ý tưởng, rằng làm thế nào để làm điều đó trong O(n) time
và O(1) space
?
là các số nguyên trong dải ô được giới hạn? Người ta có thể ngụ ý sắp xếp radix tại chỗ nếu chúng là – amit
@amit: không ... nhưng tôi cũng muốn biết về điều đó ... vui lòng thêm trường hợp đó làm câu trả lời ... –
@RaviGupta: vâng, tôi không biết O (n) giải pháp nhưng một giải pháp hiệu quả là lần đầu tiên kiểm tra chiều dài của mảng và nếu nó là như nhau thì sắp xếp cả hai mảng bằng cách sử dụng bất kỳ thuật toán O (nlogn) nào. Sau đó so sánh các phần tử nếu chúng bằng nhau thì chúng hoán vị nhau. Và không gian phức tạp sẽ là O (1). – ankurtr