Size: a a a

2020 February 21

VG

Vladislav Golovatyi in pro.flood
Lena Varlamova
некоторые такие задроты в литкоде, могут любуую задачу за 20 минут решить
смеюсь по бизнес-логовски
источник

С

Славик in pro.flood
источник

С

Славик in pro.flood
без ide
источник

LV

Lena Varlamova in pro.flood
Крутяк!
источник

С

Славик in pro.flood
ну минут 30-40 где-то суммарно ушло
источник

LV

Lena Varlamova in pro.flood
Каким образом?
источник

С

Славик in pro.flood
я как только ее увидел, открыл и меня отвлекли
источник

LV

Lena Varlamova in pro.flood
Я тоже решила
источник

С

Славик in pro.flood
потом я освободился, попробовал один вариант, он не прошел и меня снова отвлекли
источник

С

Славик in pro.flood
Lena Varlamova
Каким образом?
при худшем раскладе n^2, наверное
источник

LV

Lena Varlamova in pro.flood
Славик
потом я освободился, попробовал один вариант, он не прошел и меня снова отвлекли
Кто тебя все отвлекает
источник

С

Славик in pro.flood
ну я в офисе
источник

С

Славик in pro.flood
работа
источник

LV

Lena Varlamova in pro.flood
Славик
при худшем раскладе n^2, наверное
Не похоже. У меня о от эт и примерно столько же в процентах
источник

LV

Lena Varlamova in pro.flood
Доп память использовал?
источник

С

Славик in pro.flood
беру текущую стенку и иду дальше до конца или до стенки выше начальной
источник

С

Славик in pro.flood
по пути считаю, есть ли уже вариант типа

4 2 3
источник

С

Славик in pro.flood
то есть левая стенка выше правой крайней, но вода уже скопилась между ними
источник

С

Славик in pro.flood
и если я дошел до конца и не нашел справа стенки выше, чем была слева, то добавляю в сумму максимальный промежуточный вариант
источник

С

Славик in pro.flood
        int l = height.length;
       if (l < 3) {
           return 0;
       }
       
       int i = 0;
       int total = 0;
       
       while (i < l - 2) {
           if (height[i + 1] >= height[i]) {
               i++;
               continue;
           }
           
           int left = height[i];
           int sum = height[i + 1];
           int max = sum;
           int maxPossible = 0;
           int maxI = i;
           for (int j = i + 2; j < l; j++) {
               if (height[j] > left) {
                   maxPossible = (j - i - 1) * left - sum;
                   maxI = j - 1;
                   break;
               }
               if (height[j] >= max) {
                   max = height[j];
                   maxPossible = (j - i - 1) * max - sum;
                   maxI = j - 1;
               }
               sum += height[j];                
           }            
           total += maxPossible;
           i = maxI + 1;
       }
       
       return total;
источник