
Are Similar
Two arrays are called similar if one can be obtained from another by swapping at most one pair of elements in one of the arrays.
Hai mảng a
và b
được gọi là tương đồng nếu ta có thể thu được mảng b
bằng cách đổi chỗ tối đa 1 lần 2 phần tử bất kì trong mảng a
Cho hai mảng a
và b
, kiểm tra hai mảng có tương đồng hay không?
Ví dụ
-
Với
a = [1, 2, 3]
vàb = [1, 2, 3]
, kết quảareSimilar(a, b) = true
.Hai mảng này giống nhau mà không cần đổi chỗ phần tử nào
-
For
a = [1, 2, 3]
andb = [2, 1, 3]
, kết quảareSimilar(a, b) = true
.Chúng ta thu được mảng
b
từ mảnga
bằng cách đổi chỗ 2 phần tử2
và1
. -
Với
a = [1, 2, 2]
vàb = [2, 1, 1]
, kết quảareSimilar(a, b) = false
.Đổi chỗ bất kì cặp số nào trong mảng
a
cũng không thể thu được mảngb
Đầu vào/Đầu ra
-
[Thời gian chạy] 0.5 giây
-
[Đầu vào] array.integer a, b
Mảng chứa số nguyên.
Điều kiện:3 ≤ a.length, b.length ≤ 105
1 ≤ a[i], b[i] ≤ 1000
. -
[Đầu ra] boolean
true
nếua
vàb
tương đồng,false
ngược lại.
Hướng dẫn bài tập:
Code mẫu:
Ngôn ngữ C++:
bool areSimilar(std::vector<int> a, std::vector<int> b)
{
int d = 0;
for (int i = 0; i < a.size(); i++)
if (a[i] != b[i])
d++;
if (d != 0 && d != 2)
return false;
int h = 0;
for (int i = 0; i < a.size(); i++)
if (a[i] != b[i]){
h = i;
break;
}
for (int i = h + 1; i < a.size(); i++)
if (a[i] != b[i]){
return (a[i] == b[h] && a[h] == b[i]);
}
return true;
}
Post Comment