Đây là một câu hỏi phỏng vấn.Tìm số cặp vợ chồng có cùng sự khác biệt trong một mảng được sắp xếp
"Cho một mảng được sắp xếp. Tìm số cặp vợ chồng có cùng sự khác biệt". Ví dụ:
ví dụ: nếu mảng là {1, 2, 3, 5, 7, 7, 8, 9};
sau đó chúng tôi có
5 cặp với sự khác biệt của 1
6 cặp với sự khác biệt của 2
4 cặp với sự khác biệt của 4
2 cặp với sự khác biệt của 3
4 cặp với sự khác biệt của 6
3 cặp với sự khác biệt của 5
2 cặp với sự khác biệt của 7
1 cặp với sự khác biệt của 8
1 cặp với chênh lệch từ 0
tôi thử như sau:
maxdiff=arr[n-1]-arr[0]; //calculating the maximum difference
int b[maxdiff];
for(i=0;i<maxdiff;i++)
{
for(j=0;j<n;j++)
{
p=arr[j]+i;
x=binarysearch(p,arr); //search p in array,where x return 0/1
if(x==1)
b[i]++;
}
}
đây là giải pháp O (k * n * logn) trong đó k là chênh lệch lớn nhất giữa phần tử đầu tiên và cuối cùng của mảng được sắp xếp, n là kích thước mảng.
Có ai có ý tưởng nào tốt hơn điều này không?
Bạn cũng nên bao gồm "chênh lệch 0" và "chênh lệch 8". – Sebastian
Bạn có thể sử dụng HashMap thay vì mảng, khi đó tìm kiếm nhị phân có thể được thay thế bằng tìm kiếm thông thường trong HashMap là O (1) – Reddy
@Sebastian: done – x0v