【问题标题】:is map more efficient than an object in this case?在这种情况下,地图比对象更有效吗?
【发布时间】:2023-01-31 18:22:06
【问题描述】:

你好,我只是想了解和澄清一些事情,我正在解决这个问题“没有重复字符的最长子串”,我正在使用一个对象作为地图但解决方案没有被接受,它说超过了时间限制,但是当我将对象更改为一张地图,它工作得很好。

这是代码:

function lengthOfLongestSubstring(s = "") {
        let end = 0;
        let start = 0;
        let maxLength = 0;
        const map = new Map();
        while (end < s.length) {
          if (!map.has(s[end])) {
            map.set(s[end], end);
            end++;
            maxLength = Math.max(maxLength, end - start);
          } else {
            map.delete(s[start]);
            start++;
          }
        }
        return maxLength;
      }

以下代码将不被接受:

 function lengthOfLongestSubstring(s = "") {
        let end = 0;
        let start = 0;
        let maxLength = 0;
        const map = {};
        while (end < s.length) {
          if (!map[s[end]]) {
            map[s[end]] = end;
            end++;
            maxLength = Math.max(maxLength, end - start);
          } else {
            delete map[start];
            start++;
          }
        }
        return maxLength;
      }

【问题讨论】:

  • 那是什么密码没有工作?
  • @CertainPerformance 只需将 map 对象更改为简单对象,它就会抛出超出时间限制,我在 leetcode 上解决了这个问题,他们接受新的 map () 实现但不接受简单对象 {}
  • 你好,你收到每个测试用例的 TLE 了吗?
  • 检查这个答案,它表明地图比对象快得多 stackoverflow.com/a/37994079/668572
  • 如果您将地图更改为普通对象而不更改任何其他内容,您的代码将抛出错误,因为普通对象上不存在 ``.has`(和其他方法)

标签: javascript big-o


【解决方案1】:

我认为这条线

delete map[start];

应更正为

delete map[s[start]];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2020-08-22
    • 2020-08-07
    • 1970-01-01
    • 2012-08-27
    相关资源
    最近更新 更多