【LeetCode与《代码随想录》】双指针篇:做题笔记与总结-JavaScript版

2023-11-02

代码随想录

代码随想录
代码随想录CSDN官方

主要题目

27. 移除元素

https://leetcode.cn/problems/remove-element/

/**
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */
var removeElement = function (nums, val) {
    let i = 0;
    for (let j = 0; j < nums.length; j++) {
        if (nums[j] != val) {
            nums[i++] = nums[j];
        }
    }
    return i;
};

344.反转字符串

https://leetcode.cn/problems/reverse-string/

/**
 * @param {character[]} s
 * @return {void} Do not return anything, modify s in-place instead.
 */
var reverseString = function (s) {
    for (let i = 0, j = s.length - 1; i < j; i++, j--) {
        [s[i], s[j]] = [s[j], s[i]]
    }
};

剑指Offer 05.替换空格

https://leetcode.cn/problems/ti-huan-kong-ge-lcof/

/**
 * @param {string} s
 * @return {string}
 */
var replaceSpace = function (s) {
    let arr = Array.from(s);
    let ans = [];
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] == ' ') {
            ans.push('%20')
        } else {
            ans.push(arr[i])
        }
    }
    return ans.join('')
};

151.翻转字符串里的单词

https://leetcode.cn/problems/reverse-words-in-a-string/

/**
 * @param {string} s
 * @return {string}
 */

// 去除多余空格
var space = function (s) {
    let arr = s.split(' ');
    let ans = []
    for (let i = arr.length - 1; i >= 0; i--) {
        if (arr[i] != '') {
            ans.push(arr[i])
        }
    }
    return ans;
}

var reverseWords = function (s) {
    let arr = space(s);
    return arr.join(' ')
};

206.反转链表

https://leetcode.cn/problems/reverse-words-in-a-string/submissions/405363322/

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function (head) {
    if (head === null || head.next === null) return head;
    var a = head, b = a.next, c = b.next;
    a.next = null;
    while (b) {
        b.next = a;
        a = b; b = c;
        if (c) c = c.next;
    }
    return a;
};

24. 两两交换链表中的节点

https://leetcode.cn/problems/swap-nodes-in-pairs/

要注意:不能出现null.next的情况。

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var swapPairs = function (head) {
    if (head === null || head.next === null) return head;
    // 虚拟头结点,指向头结点
    let pre = new ListNode(0, head);
    let a = pre, b = a.next, c = b.next;
    while (b && c) {
        a.next = c;
        b.next = c.next;
        c.next = b;
        a = a.next.next;
        b = a.next;
        if (b) c = b.next;
    }
    return pre.next;
};

19. 删除链表的倒数第 N 个结点

https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/

一定要从虚拟头节点开始,而非头节点。这样可以兼容链表中只有一个节点的特殊情况。

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} n
 * @return {ListNode}
 */
var removeNthFromEnd = function (head, n) {
    let pre = new ListNode(0, head);
    let i = pre;
    for (let ii = 0; ii < n; ii++) {
        i = i.next;
    }
    let j = pre;
    while (i.next) {
        i = i.next;
        j = j.next;
    }
    j.next = j.next.next;
    return pre.next;
};

面试题 02.07. 链表相交

https://leetcode.cn/problems/intersection-of-two-linked-lists-lcci/

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */

/**
 * @param {ListNode} headA
 * @param {ListNode} headB
 * @return {ListNode}
 */
var getIntersectionNode = function (headA, headB) {
    let a = headA, b = headB;
    let numa = 1, numb = 1;
    while (a) {
        a = a.next;
        numa++;
    }
    while (b) {
        b = b.next;
        numb++;
    }
    while (numa > numb) {
        headA = headA.next;
        numa--;
    }
    while (numb > numa) {
        headB = headB.next;
        numb--;
    }
    while (headA && headB && headA !== headB) {
        headA = headA.next;
        headB = headB.next;
    }
    return headA;
};

142.环形链表II

https://leetcode.cn/problems/linked-list-cycle-ii/

注意:要在while里面判断i===j,若在while条件中要求i!==j,则根本不会进入循环。

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var detectCycle = function (head) {
    let i = head, j = head;
    while (i && j) {
        i = i.next;
        j = j.next;
        if (i) i = i.next;
        if (i === j) break;
    }
    if (!i) {
        return null;
    }

    // ij在这相遇 i是快指针
    let k = head;
    while (i != k) {
        i = i.next;
        k = k.next;
    }
    return i;
};

15. 三数之和

https://leetcode.cn/problems/3sum/

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function (nums) {
    let ans = [];
    // 排序:nums从小到大
    nums.sort((a, b) => (a - b));

    for (let i = 0; i < nums.length; i++) {
        let l = i + 1, r = nums.length - 1;
        if (nums[i] > 0) continue;
        if (i && nums[i] === nums[i - 1]) continue;

        while (l < r) {
            let temp = nums[i] + nums[l] + nums[r];
            if (temp > 0) {
                r--;
            }
            else if (temp < 0) {
                l++;
            }
            else {
                ans.push([nums[i], nums[l], nums[r]]);
                let tempp = nums[l];
                while (nums[l] === tempp) {
                    l++;
                }
                tempp = nums[r];
                while (nums[r] === tempp) {
                    r--;
                }
            }
        }
    }
    return ans;
};

18. 四数之和

https://leetcode.cn/problems/4sum/

注意i、j的去重。

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[][]}
 */
var fourSum = function (nums, target) {
    nums.sort((a, b) => (a - b));
    let ans = [];

    for (let i = 0; i < nums.length; i++) {
        // 去重:判断左边界
        if (i && nums[i] === nums[i - 1]) continue;
        for (let j = i + 1; j < nums.length; j++) {
            if (j > i + 1 && nums[j] === nums[j - 1]) continue;
            let t1 = nums[i] + nums[j];

            let l = j + 1, r = nums.length - 1;
            while (l < r) {
                let t2 = nums[l] + nums[r];
                if (t1 + t2 > target) {
                    r--;
                }
                else if (t1 + t2 < target) {
                    l++;
                }
                else {
                    ans.push([nums[i], nums[j], nums[l], nums[r]]);
                    let temp = nums[l];
                    while (nums[l] === temp) {
                        l++;
                    }
                    temp = nums[r];
                    while (nums[r] === temp) {
                        r--;
                    }
                }
            }
        }
    }
    return ans;
};

相关题目

26.删除排序数组中的重复项

https://leetcode.cn/problems/remove-duplicates-from-sorted-array/

/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function (nums) {
    let i = 0;
    for (let j = 0; j < nums.length; j++) {
        if (!i || nums[j] != nums[i - 1]) {
            nums[i++] = nums[j];
        }
    }
    return i;
};

283.移动零

https://leetcode.cn/problems/move-zeroes/

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var moveZeroes = function (nums) {
    let i = 0;
    for (let j = 0; j < nums.length; j++) {
        if (nums[j] != 0) {
            nums[i++] = nums[j];
        }
    }
    for (; i < nums.length; i++) {
        nums[i] = 0;
    }
};

844.比较含退格的字符串

https://leetcode.cn/problems/backspace-string-compare/

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */

var fun = function (s) {
    let ans = '';
    let cnt = 0;
    for (let i = s.length - 1; i >= 0; i--) {
        if (s[i] == '#') {
            cnt++;
        }
        else {
            if (cnt) {
                cnt--;
            } else {
                ans += s[i];
            }
        }
    }
    return ans;
}

var backspaceCompare = function (s, t) {
    let ss = fun(s);
    let tt = fun(t);
    // console.log(ss,tt)
    if (ss == tt) return true;
    else return false;
};

977.有序数组的平方

https://leetcode.cn/problems/squares-of-a-sorted-array/

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var sortedSquares = function (nums) {
    // 平方:两边大,中间小
    let ans = [];
    for (let i = 0, j = nums.length - 1; i <= j;) {
        let ii = nums[i] * nums[i], jj = nums[j] * nums[j];
        if (ii >= jj) {
            ans.unshift(ii); i++;
        } else {
            ans.unshift(jj); j--;
        }
    }
    return ans;
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【LeetCode与《代码随想录》】双指针篇:做题笔记与总结-JavaScript版 的相关文章

  • 从 thymeleaf 获取数据到模态引导程序、jquery

    我正在尝试获取模态视图的 id 这是为了更新 onclick 元素 但我找不到方法 知道如何为 boostrap 5 完成此操作 或我可以用其他方法吗 谢谢 tr a inactivate a div class modal fade mo
  • 不和谐机器人 |不和谐.js |类型错误:无法读取未定义的属性“长度”

    我正在制作一个 Discord 机器人 并且正在使用 CodeLyon 的视频作为参考 该错误位于我的 message js 文件中 该文件包含以下内容 require dotenv config create cooldowns map
  • TypeError: props.render 不是一个函数(React hook 形式)

    我将方法作为我用react hook form制作的形式的道具传递 当从react hook form添加控制器时 它给了我 TypeError props render不是一个函数 我在网上找不到任何解决方案 因此感谢任何帮助 impor
  • 在 Vue.js 中从父组件执行子方法

    目前 我有一个 Vue js 组件 其中包含其他组件的列表 我知道使用 vue 的常见方式是将数据传递给孩子 并从孩子向父母发出事件 但是 在这种情况下 我想在子组件中的按钮出现时执行子组件中的方法 parent被点击 哪种方法最好 一种建
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • Jquery/Javascript 上传和下载文件,无需后端

    是否可以在没有后端服务器的情况下在 JavaScript 函数中下载和上传文件 我需要导出和导入由 JavaScript 函数生成的 XML 我想创建按钮 保存 xml 来保存文件 但我不知道是否可行 另一方面 我希望将 XML 文件直接上
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • 通过 CDN 使用 Dojo 时如何加载自定义 AMD 模块?

    我正在使用 google 的 CDN 并尝试使用他们的加载程序加载我自己的 AMD 模块 我知道我做错了什么 但我被困住了 有任何想法吗
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • Javascript 数组到 VBScript

    我有一个使用 Javascript 构建的对象数组 我需要使用 VBScript 读取它 如下例所示 我找不到在 VbScript 代码中循环遍历数组的方法myArray object 这个例子是我的问题的简化 我无法更改页面的默认语言 这
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • FireFox 中的自动滚动

    我的应用程序是实时聊天 我有一个 Div 来包装消息 每条消息都是一个 div 所以 在几条消息之后 我的 DOM 看起来像这样 div div Message number two div div div div
  • 如何在类似控制台的环境中运行 JavaScript?

    我正在尝试遵循这里的示例 http eloquentjavascript net chapter2 html http eloquentjavascript net chapter2 html and print blah 在浏览器中运行时
  • 如何获取给定 DOM 元素的所有定义的 CSS 选择器?

    如何使用 jQuery 获取给定 DOM 元素的所有定义的 CSS 选择器 定义后 我的意思是在应用于任何样式表的所有 CSS 选择器document 在某种程度上 这类似于 FireBug 实现的功能 其中显示所选 DOM 元素的所有应用
  • 有没有办法阻止 prettier / prettier-now 将函数参数分解为新行

    当使用 prettier prettier now 在保存时进行格式化时 当一个函数包装另一个函数时 它会中断到一个新行 我想知道是否有办法阻止这种行为 例如 期望的输出 app get campgrounds id catchAsync
  • 条件在反应本机生产中失败,但在开发中有效

    我创建了一个反应本机应用程序 我需要通过它进行比较 如果属实 就会执行死刑 问题是 该条件适用于 React Native 开发模式 而不适用于 React Native 生产版本 我使用 firebase 作为数据库 也使用 redux
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 如何在 pg-promise 中设置模式

    我正在搜索的文档pg 承诺 https github com vitaly t pg promise特别是在创建客户端时 但我无法找到设置连接中使用的默认架构的选项 它始终使用public架构 我该如何设置 通常 为数据库或角色设置默认架构

随机推荐

  • 无人驾驶汽车系统入门(十三)——正态分布变换(NDT)配准与无人车定位

    无人驾驶汽车系统入门 十三 正态分布变换 NDT 配准与无人车定位 定位即确定无人车在这个世界中的哪个位置 是无人驾驶技术栈中必不可少的一部分 对于无人车而言 对定位的要求极高 一般情况下 我们希望我们的无人车能够达到 厘米级 的定位精度
  • 【数据结构 C语言版】树,二叉树,线索二叉树,哈夫曼树

    树的概念 根 如下图中 树形结构的 A 子树 每个节点下又称为一棵子树 如 B 为 A 的子树 在一棵树中 节点被定义为他的每一个 子树 根节点的前驱 而他每一个子树的根节点就是他的后继 在描述属性树形结构时 人们往往使用家族称谓 如 把
  • Mysql - 为啥不建议UUID当主键

    1 不能当主键的原因 MySQL写入数据时 会把数据存放到索引页中 使用UUID作为主键 新行的主键值不一定比之前的主键值大 所以innoDb无法做到总是把新行插入到索引的最后 而需要为新行寻找合适的位置来分配新的空间 因为是B 树方式存储
  • 本周 RocektMQ社区活动

    本周 RocektMQ社区邀请了陈厚德老师进行源码直播分享 陈老师曾就职于腾讯 盛大 斗鱼等知名互联网公司 现就职于尚德机构 分享相关信息 直播方式 钉钉群直播方式 群号 21791227 分享题目 RocketMQ同步 异步刷盘机制 分享
  • 微信小程序日历签到,拿走即用~

    参考了小友那个谁的 具体也忘记了 改be改be即用了 因为是日历 里面有一个算空格的地方 嘻嘻 也是小友提供的 再次感谢 html
  • AngularJS 1.4.6 实践 一 —— 单页应用登录验证

    AngularJS 1 4 6 实践 一 单页应用登录验证 一 多视图路由及路由嵌套 1 多视图路由 2 路由嵌套 二 路由检测登录状态 1 添加路由改变监听事件 2 非常重要 解决未知路径无限循环 三 整体代码 1 index html
  • Mysql的SQL语句优化和事务隔离级别

    文章目录 安装步骤 mysql连接命令 优化 事务4种特性和4种级别 脏读 不可重复读 幻读 安装步骤 我的文章 https blog csdn net UnicornRe article details 117657298 mysql连接
  • Python读取Access数据库基本操作

    接上篇 python操作Access mdb数据库环境配置 配置好的环境 进行Access数据库基本的操作 导入模块 import pypyodbc import win32com client path r C Users Adminis
  • Parasoft Jtest 2023.1版本-全新的Jtest让你的Java测试更加容易

    测试用例的创建和执行以及测量代码覆盖率是现代开发过程的重要组成部分 新发布的Parasoft Jtest 2023 1增加了重要的新功能 使Java开发和QA团队在测试实践中更具有生产力和效率 通过使用最新版本的Jtest 您可以在Visu
  • C/C++编程:从0到1学习libuv(linux、Clion)

    libuv强制使用异步和事件驱动的编程风格 它的核心工作是提供一个event loop 还有其他基于IO和其他事件通知的回调函数 libhv还提供了一些核心工具 比如定时器 非阻塞的网络支持 异步文件系统访问 子进程等 实践 接下来我们安装
  • [CentOS6.5]cmake: command not found

    yum install y cmake
  • 如何使用Python进行数据挖掘?

    使用Python进行数据挖掘需要掌握以下几个关键步骤 数据收集 首先 你需要获取你要进行数据挖掘的数据 可以从公共数据集 API 数据库等各种来源收集数据 数据清洗 清洗数据是一个重要的步骤 它包括去除重复数据 处理缺失值 处理异常值 标准
  • 2020-11-30

    嵌入式MQTT库移植 基于mosquitto库 一 交叉编译OpenSSL 下载源码到Linux虚拟机环境 https www openssl org source openssl 1 1 1f tar gz 放入非windows共享文件夹
  • UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 的解决方法

    最近初学网络爬虫 今天在练习使用Python的request模块的时候遇到了一个错误 import requests 发送请求 response requests get https jingyan baidu com event img
  • input获取值时,页面数据value并未改为键入值,导致校验时数据不一致问题处理

    由于部分原因 系统现需要将数据进行动态处理 实现表头自定义 产生问题的背景不做介绍 现做此记录 方便后面查阅 问题描述 修改了input框的值 但实际value并未改变 如下可以看到下图右边值已经改为了500 但是进行调试时发现依旧是页面初
  • python UI自动化无界面运行

    python大家都知道可以使用selenium进行在Windows环境下运行 但每次都会进行弹框运行 但有时我们需要脚本在Linux环境进行运行或者不希望UI自动化频繁的弹框影响我们的操作 所有我们可以在编写UI自动化的时候选择有界面运行
  • echart--柱状图 从上到下排列 不居中

    遇到问题 echart的柱状图 我需要长这样 但是变成了下面那个图的样子 原因 1 x轴的对其方向不对 2 y轴的数据默认高度是auto 设置一个定死的值就行 3 y轴的对其方向不对 解决方案 在对应位置加上框里的参数
  • CPU interactive调频策略

    本文集中于interactive调频策略 内核可选的调频策略 读取可用的调频管理策略 sys devices system cpu cpufreq cpu0 cpufreq scaling available governors 调频策略通
  • python -m pip install --upgrade pip 报错

    具体问题 环境 windows python3 6 根据pip 的提示 WARNING You are using pip version 19 3 1 however version 20 0 2 is available You sho
  • 【LeetCode与《代码随想录》】双指针篇:做题笔记与总结-JavaScript版

    文章目录 代码随想录 主要题目 27 移除元素 344 反转字符串 剑指Offer 05 替换空格 151 翻转字符串里的单词 206 反转链表 24 两两交换链表中的节点 19 删除链表的倒数第 N 个结点 面试题 02 07 链表相交