JacksonSteel Ответов: 3

Почему бы не индексировать вместо q.top()? [leetcode 32][динамическое программирование]


leetcode32[^]
class Solution {
public:
  int longestValidParentheses(string s) {
    stack<int> q; //LIFO
    int start = 0;
    int ans = 0;
    for (int i = 0;i < s.length(); i++) {
      if(s[i] == '(') {
        q.push(i);
      } else {
        if (q.empty()) {
          start = i + 1;
        } else {
          int index = q.top(); q.pop();
          ans = max(ans, q.empty() ? i - start + 1 : i - q.top());    
если не нужно
index
- а зачем это объявлять?
        }
      }
    }
    return ans;
  }
};


Что я уже пробовал:

(почему бы не выбрать совпадающее " ("но предыдущее?)

3 Ответов

Рейтинг:
2

Patrice T

Цитата:
(почему бы не выбрать совпадающее " ("но предыдущее?)

Мы не можем помочь вам, потому что код, который вы предоставили, не является полной функцией.
Как сказал ОГ, только автор этого кода может объяснить вам, что есть что.
Цитата:
зачем объявлять об этом?

Если вы можете скомпилировать код после комментирования строки, то вам это не нужно.


KarstenK

Жирные слова, если он закомментирует строку a q.pop() будет отсутствовать, и код не будет работать правильно. :-O

Рейтинг:
0

OriginalGriff

Вы должны были бы спросить оригинального автора, но это либо "я собирался что-то сделать с ним, но не было необходимости", "я удалю его", либо "это было полезно для отладки".

Последнее наиболее вероятно: это позволяет намного легче увидеть, что было главным элементом, прежде чем он будет удален при тестировании вашего кода в отладчике.
Я делаю это часто: разбиваю сложную строку кода на множество более простых, каждый из которых сохраняет промежуточный результат в переменной, чтобы их было легче увидеть. Когда все это работает, соберите все это вместе и протестируйте как один элемент.

Иногда вы забываете удалить промежуточные переменные, вот и все.


Stefan_Lang

Согласен, я делаю то же самое. Кроме того, когда он работает, я оставляю его на многих простых шагах. Таким образом, когда следующий несчастный парень увидит этот код, ему не придется разбирать его снова.

OriginalGriff

Это влияет на мою (мягкую) ОКР: я знаю, что другие переменные будут оптимизированы, но ... это выглядит неопрятно! :смеяться:

Рейтинг:
0

KarstenK

Самое лучшее-это понять код. Разработчик должен понимать каждая отдельная строка из его кода.

Вам не нужен этот индекс, поэтому вы можете удалить эту команду, НО у кода есть недостаток, что q.pop() находится в этой строке.

Я предполагаю, что функция будет нуждаться в этом :-O