1001. Проверка симметрии массива
nums. Верните true, если он читается одинаково слева направо и справа налево: для всех индексов выполняется nums[i] == nums[n − 1 − i]. Иначе верните false.Примеры:
[1, 2, 3, 2, 1]
true
[1, 2, 2, 1]
true
[1, 2, 3, 4, 5]
false
Ограничения:
return.
В Java по-прежнему нужен class Solution и return.
print и System.out.println не проверяются.
Разбор открыт без подписки
На этой задаче разбор бесплатный: по нему видно, как устроены разборы zedcode. На остальных задачах он открывается по подписке.
Идея. Массив симметричен (палиндром), если каждый элемент слева совпадает
с «зеркальным» справа: nums[i] == nums[n − 1 − i] для всех i.
Как решать. Два указателя: left = 0, right = n − 1.
Пока left < right, сравнивайте пару. Если хоть одна не совпала —
сразу false. Если указатели встретились — все пары совпали, true.
- Чётная длина: указатели съедутся навстречу, центра не останется.
- Нечётная длина: средний элемент ни с кем не сравнивается — он сам себе зеркало.
- По ограничению массив непустой. Один элемент всегда симметричен: цикл не выполнится ни разу.
Пример [1, 2, 3, 2, 1]: пары (1,1) и (2,2), центр 3 → true.
У [1, 2, 3, 4, 5] уже первая пара 1 и 5 не совпадает → false.
Сложность. Время O(n), память O(1).
Типичная ошибка. Сравнивать с nums[::-1] работает, но тратит O(n) памяти.
На собеседовании ждут два указателя.
def isSymmetric(nums):
left, right = 0, len(nums) - 1
while left < right:
if nums[left] != nums[right]:
return False
left += 1
right -= 1
return True
class Solution {
public boolean isSymmetric(int[] nums) {
int left = 0;
int right = nums.length - 1;
while (left < right) {
if (nums[left] != nums[right]) {
return false;
}
left++;
right--;
}
return true;
}
}
function isSymmetric(nums) {
let left = 0;
let right = (nums.length - 1);
while (left < right) {
if (nums[left] !== nums[right]) {
return false;
}
left += 1;
right -= 1;
}
return true;
}
func isSymmetric(nums []int) bool {
var left int
var right int
left, right = 0, ((len(nums)) - (1))
for left < right {
if nums[left] != nums[right] {
return false
}
left++
right--
}
return true
}
Решите эту задачу в браузере
Создайте бесплатный аккаунт — редактор Python, Java, JavaScript и Go, проверка на тестах за секунды.
Комментарии (0)
Зарегистрируйтесь или войдите, чтобы оставить комментарий
Пока нет комментариев. Будьте первым!