Vấn đề: Cho một mảng đầu vào của các số nguyên có kích thước n và một mảng truy vấn các số nguyên k kích thước, tìm cửa sổ nhỏ nhất của mảng đầu vào chứa tất cả các phần tử của mảng truy vấn và cũng có cùng thứ tự.Tìm cửa sổ nhỏ nhất của mảng đầu vào chứa tất cả các phần tử của mảng truy vấn
Tôi đã thử phương pháp tiếp cận bên dưới.
int[] inputArray = new int[] { 2, 5, 2, 8, 0, 1, 4, 7 };
int[] queryArray = new int[] { 2, 1, 7 };
Sẽ tìm vị trí của tất cả phần tử mảng truy vấn trong inputArray.
public static void SmallestWindow(int[] inputArray, int[] queryArray)
{
Dictionary<int, HashSet<int>> dict = new Dictionary<int, HashSet<int>>();
int index = 0;
foreach (int i in queryArray)
{
HashSet<int> hash = new HashSet<int>();
foreach (int j in inputArray)
{
index++;
if (i == j)
hash.Add(index);
}
dict.Add(i, hash);
index = 0;
}
// Need to perform action in above dictionary.??
}
tôi đã theo từ điển
- int 2 -> vị trí {1, 3}
- int 1 -> vị trí {6}
- int 7 -> vị trí { 8}
Bây giờ tôi muốn thực hiện bước sau để tìm ra cửa sổ tối thiểu
So sánh vị trí int 2 với vị trí int 1. Như (6-3) < (6-1) .. Vì vậy, tôi sẽ lưu trữ 3, 6 trong một hashmap.
Sẽ so sánh vị trí của int 1 và int 7 giống như ở trên.
Tôi không thể hiểu cách tôi so sánh hai giá trị liên tiếp của từ điển. Hãy giúp tôi.
Nếu 'queryArray' là' {2, 8, 0} 'đầu ra mong đợi là gì? Các chỉ số '[0-4]' hoặc chỉ số '[2-4]'? – Ani
@Ani - Tôi nghĩ nên là '[2-4]', ngắn nhất. –
có, phải là [2-4] vì đây là cửa sổ nhỏ nhất –