Перед ковбоем Джо выложены n карт со значениями a1, a2,…, an . Он хочет получить выигрышную оследовательность карт со значениями b1, b2,…,bn. Ковбой может выбрать непрерывный отрезок карт в своей последовательности [l,r] (1<=l<=r<=n) и упорядочить карты в этом отрезке по неубыванию. Например, если перед ковбоем лежат карты
{3,3,2,5,1,5}{3,3,2,5,1,5}, он может выбрать отрезок [2,5][2,5] и получить последовательность {3,1,2,3,5,5}{3,1,2,3,5,5}.
Получится ли у ковбоя Джо получить выигрышную последовательность с помощью применения вышеописанной операции ровно один раз?
Решить задачу на языке Java
java
public class CowboysSequence {
public static boolean isPossible(int[] nums, int[] target) {
int left = 0, right = 0;
int n = nums.length, m = target.length;
while (right < m) {
if (nums[right] == target[right]) {
left++;
right++;
}
else if (nums[right] < target[right]) {
right++;
}
else {
while (left < right && nums[left] < target[right]) {
left++;
}
if (left == right) {
return false;
}
right++;
}
}
return left == n && right == m;
}
public static void main(String[] args) {
int[] nums = {3, 3, 2, 5, 1, 5};
int[] target = {3, 1, 2, 3, 5, 5};
boolean isPossible = isPossible(nums, target);
System.out.println(isPossible); // Выводит true, что означает, что получится выигрышная последовательность
}
}
В данном решении используется два указателя - left и right. Первый указатель отслеживает позицию входного массива nums, а второй указатель отслеживает позицию целевого массива target. Алгоритм выполняет итерации по массиву target и сравнивает значения текущих элементов обоих массивов. Если значения совпадают, указатели увеличиваются на 1. Если значение входного массива меньше значения целевого массива, увеличивается только указатель right. Если значение входного массива больше значения целевого массива, указатель left увеличивается до тех пор, пока не будет найден элемент, который больше или равен текущему значению целевого массива. Если указатели в конце равны длине своих массивов, то получится выигрышная последовательность. В противном случае, получить выигрышную последовательность невозможно.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет