Мы будем говорить, что элемент в массиве «в одиночку», если есть значения до и после него, и эти значения отличаются от него. Возвращает версию данного массива, где каждый экземпляр данного значения, которое в одиночку заменяется какой бы ни значение его влево или вправо, больше.
notAlone ([1, 2, 3], 2) → [1, 3, 3]
notAlone ([1, 2, 3, 2, 5, 2], 2) → [1, 3, 3, 5, 5, 2]
notAlone ([3, 4], 3) → [3, 4]
public int[] notAlone(int[] nums, int val) {
for(int k = 1 ; k<nums.length; k++)
{
if(k!= nums.length-1)
{
int max = nums[k];
if(nums[k-1]>nums[k])
max = nums[k-1];
else if(nums[k+1] > nums[k])
max = nums[k+1];
if(nums[k-1] != nums[k] && nums[k] != nums[k+1])
nums[k] = max;
}
}
return nums;
}
Когда я побежал это на codingbat, он работал на всех примерах, за исключением этого: notAlone ([1, 2, 3, 2, 5, 2], 2) должен возвращать [1, 3, 3, 5, 5, 2], но вместо шахты вернулись [1, 3, 3, 3, 5, 2].
Я действительно застрял на том, как решить эту проблему, потому что в моем уме, что я написал, должен работать на этом конкретном примере, как хорошо, но, видимо, это не так. Где моя ошибка взялась? Как я должен переписать мой код? Любая помощь будет очень признателен!
Вы более усложняя его. Вам нужно только найти max
из предыдущих и последующих элементов , если текущий элемент должен быть заменен:
public static int[] notAlone(int[] nums, int val) {
for(int k = 1 ; k<nums.length - 1; k++)
{
if(nums[k]==val && nums[k-1] != nums[k] && nums[k] != nums[k+1])
nums[k] = Math.max (nums[k-1], nums[k+1]);
}
return nums;
}
Кстати, в своем решении вы проигнорируете данное значение ( val
):
Возвращает версию данного массива , где каждый экземпляр данного значения заменяется , который в одиночку ...
Это не причина, почему ваш код не удалось в данном случае, хотя. Вы просто не нашли правильный максимум:
Когда k==3
:
int max = nums[k]; // max = 2
if(nums[k-1]>nums[k]) // 3 > 2
max = nums[k-1]; // max = 3
else if(nums[k+1] > nums[k]) // no evaluated. therefore you change num[3] to 3 instead of to 5
max = nums[k+1];
Если вы заменили эти 5 строк с:
int max = nums[k-1];
if(nums[k+1] > max)
max = nums[k+1];
вы получили бы правильный выход.
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения