Локальный минимум в списке

91
08 марта 2022, 23:50

Задача заключается в следующем:

Необходимо реализовать функцию, которая из элементов переданного списка целых чисел составит новый список, состоящий из всех элементов переданного списка за исключением локальных минимумов. Локальный минимум - элемент, который строго меньше соседей слева и справа (для элемента[0] - справа, для последнего - слева). Обращаться к элементам по индексу запрещено, перебирать элементы с помощью цикла for (int value: list) {..}

Проблема следующая: Если в списке имеются два одинаковых элемента, причем один из них является локальным минимум, то в новый список не добавляются оба (хотя должен не добавиться только тот, который является локальным минимумом).

Ниже прикрепляю фрагмент кода.

static List<Integer> list(List<Integer> list) {
    List<Integer> newList = new ArrayList<>();
    for (Integer value : list) {
        if (!isLocalMin(list, value)) {
            newList.add(value);
        }
    }
    return newList;
}
static boolean isLocalMin(List<Integer> list, int number) {
    Integer bufferNum = 0;
    Integer bufferLeft = 0;
    for (Integer value : list) {
        if (value == number) {
            bufferLeft = bufferNum;
            bufferNum = number;
        } else {
            if (bufferLeft > bufferNum && value > bufferNum) {
                return true;
            }
            bufferNum = value;
            bufferLeft = bufferNum;
        }
    }
    return false;
}
Answer 1

Это делается одним циклом:

function f(arr) { 
  var res = [] 
  var l, c, r 
  var first = true 
   
  for (r of arr) { 
    if (first) { 
      l = Infinity 
      c = r 
      first = false 
    } else { 
      if (!(c < l && c < r)) { 
        res.push(c) 
      } 
     
      l = c 
      c = r 
    } 
  } 
   
  if (c >= l) { 
    res.push(c) 
  } 
   
  return res 
} 
 
var a = Array.from({length:10}, () => Math.random()*100 | 0) 
console.log(a.join(", ") + "\n" + f(a).join(", "))

READ ALSO
Зачем создавать интерфейсы для классов с единственной реализацией

Зачем создавать интерфейсы для классов с единственной реализацией

С таким я столкнулся еще когда впервые узнал про DAO-слой, где один парень настойчиво рекомендовал не делать конкретную реализацию, а программировать...

89
Странный вывод в txt файл. (вывод RGB данных пикселей картинок в txt файл)

Странный вывод в txt файл. (вывод RGB данных пикселей картинок в txt файл)

Попробовал найти и вывести RGB данные одной картинки (ну конечно программа должна работать для любых картинок) в один соответствующий txt файл

95
Распарсить массив json в составе json

Распарсить массив json в составе json

Имею массив json в составе большого jsonИспользую jackson

98
getReader() и getInputStream() в веб приложении

getReader() и getInputStream() в веб приложении

Столкнулась с проблемой что нельзя одновременно у одного request вызвать и getReader(), и getInputStream(), в документации написано что нельзя и на практике...

205