数据结构和算法
程序员白特
公众号:程序员白特,欢迎一起学习交流~
展开
-
你还不会大厂必考的10个经典排序算法吗?
众所周知,10个经典排序算法在大厂的校招、社招面试中频繁出现,那么今天我们就来用JS语言实现一下这10个经典排序算法吧。原创 2024-02-23 17:21:50 · 245 阅读 · 0 评论 -
LeetCode 3. 无重复字符的最长子串
Hi,大家好,我是小庄。今天打卡的算法题是 —— 力扣 3. 无重复字符的最长子串该题是校招+社招中,考查频率排名第二的算法题,考察频率排名第一的是反转链表,详细解法请看公众号中的上一篇文章。该题将采用「哈希表 + 滑动窗口」实现,话不多说,一起来学习吧~一、Leetcode题目 1、题目地址点击查看Leetcode题目2、具体题目二、实现代码 1、思路:哈希表 + 滑动窗口(1)具体代码/** * @param {string} s&nbs原创 2022-06-29 23:39:00 · 383 阅读 · 0 评论 -
LeetCode 206. 反转链表(迭代+递归)
Hi,大家好,我是小庄。今天打卡的算法题是 —— LeetCode 206.反转链表该题将采用「迭代法」和「递归法」分别实现话不多说,一起来学习吧~一、Leetcode题目 1、题目地址点击查看Leetcode题目2、具体题目二、实现代码 1、思路:迭代法;(1)具体代码/** * Definition for singly-linked list. * function ListNode(val,&n原创 2022-06-22 23:02:48 · 416 阅读 · 0 评论 -
剑指Offer 66_构建乘积数组
日常打卡算法原创 2022-06-15 16:53:33 · 142 阅读 · 0 评论 -
剑指 Offer 62. 圆圈中最后剩下的数字(javascript)
剑指 Offer 62. 圆圈中最后剩下的数字原创 2022-06-06 19:31:38 · 163 阅读 · 0 评论 -
剑指 Offer II 056. 二叉搜索树中两个节点之和(javascript)
一、题目链接https://leetcode.cn/problems/opLdQZ/二、具体代码/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (rig原创 2022-05-28 16:33:46 · 210 阅读 · 0 评论 -
剑指 Offer 61. 扑克牌中的顺子(javascript)
一、题目地址https://leetcode-cn.com/problems/bu-ke-pai-zhong-de-shun-zi-lcof/comments/二、具体代码/** * @param {number[]} nums * @return {boolean} */// hashmap + 遍历// 时间复杂度: O(1)// 空间复杂度: O(1)var isStraight = function(nums) { let set = new Set(); let原创 2022-04-21 13:47:19 · 1112 阅读 · 0 评论 -
剑指 Offer 58 - I. 翻转单词顺序(javascript)
一、题目地址https://leetcode-cn.com/problems/fan-zhuan-dan-ci-shun-xu-lcof/comments/二、具体代码/** * @param {string} s * @return {string} */// 双指针// 时间复杂度: O(N)// 空间复杂度: O(N)var reverseWords = function(s) { s = s.trim(); let j = s.length - 1, i = j;原创 2022-04-13 13:41:36 · 772 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列(javascript)
一、题目地址https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/二、具体代码/** * @param {number} target * @return {number[][]} */// 滑动窗口// 时间复杂度:O(N)// 空间复杂度:O(N)var findContinuousSequence = function(target) { let i = 1, j = 1;原创 2022-04-11 13:35:07 · 704 阅读 · 0 评论 -
剑指 Offer 57. 和为s的两个数字(javascript)
一、题目地址https://leetcode-cn.com/problems/he-wei-sde-liang-ge-shu-zi-lcof/二、具体代码/** * @param {number[]} nums * @param {number} target * @return {number[]} */// 双指针做法// 时间复杂度:O(N)// 空间复杂度:O(1)var twoSum = function(nums, target) { let i = 0, j =原创 2022-04-10 11:36:13 · 853 阅读 · 0 评论 -
剑指 Offer 56 - II. 数组中数字出现的次数 II(javascript)
一、题目地址https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii-lcof/comments/二、具体代码/** * @param {number[]} nums * @return {number} */// 位运算,通用模版// 时间复杂度:O(N)// 空间复杂度:O(1) var singleNumber = function(nums) { // 正确做法,需要加上每一位填原创 2022-04-08 13:46:41 · 836 阅读 · 0 评论 -
剑指 Offer 56 - I. 数组中数字出现的次数(javascript)
一、题目地址https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/comments/二、具体代码/** * @param {number[]} nums * @return {number[]} *//* 思路:异或运算; 注意点:运算符的优先级问题, 该加括号提升运算优先级就要添加括号,否则会出错; */// 时间复杂度: O(n)// 空间复杂度: O(1) var原创 2022-04-04 14:05:07 · 1254 阅读 · 0 评论 -
leetcode 34. 在排序数组中查找元素的第一个和最后一个位置(javascript)
一、题目地址https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/二、具体代码/** * @param {number[]} nums * @param {number} target * @return {number} */// 两次二分搜索法,优化版// 时间复杂度: O(logn)// 空间复杂度: O(1)var searchRange = functi原创 2022-04-01 13:44:08 · 1489 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I(javascript)
一、题目地址https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof/二、具体代码/** * @param {number[]} nums * @param {number} target * @return {number} */// 两次二分搜索法,暂未优化,可提取公共代码// 时间复杂度: O(logn)// 空间复杂度: O(1)var search = function(nums原创 2022-03-31 13:32:29 · 842 阅读 · 0 评论 -
剑指 Offer 50. 第一个只出现一次的字符(javascript)
一、题目地址https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/二、具体代码/** * @param {string} s * @return {character} */// 时间复杂度:O(N)// 空间复杂度:O(1)var firstUniqChar = function(s) { let map = new Map(); /* 在map中记录s中每一原创 2022-03-28 13:38:31 · 704 阅读 · 0 评论 -
剑指 Offer 47. 礼物的最大价值(javascript)
一、题目地址https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof/二、具体代码/** * @param {number[][]} grid * @return {number} */// 动态规划// 时间复杂度:O(mn)// 空间复杂度:O(1)var maxValue = function(grid) { let m = grid.length; let n = grid[0].length;原创 2022-03-25 13:35:11 · 1444 阅读 · 0 评论 -
剑指 Offer 46. 把数字翻译成字符串(javascript)
一、题目地址https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/二、具体代码/** * @param {number} num * @return {number} */// 动态规划// 时间复杂度:O(n)// 空间复杂度:O(n)var translateNum = function(num) { let numStr = String(num); let a = 1, b原创 2022-03-24 13:51:01 · 888 阅读 · 0 评论 -
leetcode 557. 反转字符串中的单词 III
一、题目地址https://leetcode-cn.com/problems/reverse-words-in-a-string-iii/二、具体代码/** * @param {string} s * @return {string} **/// 做法一:两次切片,不需要遍历// 时间复杂度:O(N)// 空间复杂度:O(1)var reverseWords = function(s) { return s.split(' ').reverse().join(' ').split原创 2022-03-01 13:27:45 · 169 阅读 · 0 评论 -
剑指 Offer 44. 数字序列中某一位的数字(javascript)
一、题目地址https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/二、具体代码/** * @param {number} n * @return {number} */// 迭代 + 求整// 时间复杂度:O(logn)// 空间复杂度:O(logn)var findNthDigit = function(n) { let start = 1, digit = 1, count原创 2022-02-25 13:53:55 · 289 阅读 · 0 评论 -
剑指 Offer 45. 把数组排成最小的数(javascript)
一、题目地址https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/二、具体代码1、采用内置函数sort/** * @param {number[]} nums * @return {string} */// 时间复杂度: O(NlogN)// 空间复杂度: O(N)var minNumber = function(nums) { // 升序排列 return nums.sort(原创 2022-02-22 13:44:48 · 447 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字(javascript)
一、题目链接https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/二、具体代码/** * @param {number[]} nums * @return {number} */// 摩尔投票法// 时间复杂度:O(n)// 空间复杂度:O(1)var majorityElement = function(nums) { let x = 0, vot原创 2022-02-21 13:35:55 · 441 阅读 · 0 评论 -
剑指 Offer 36. 二叉搜索树与双向链表(Javascript)
一、题目地址https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/二、具体代码/** * // Definition for a Node. * function Node(val,left,right) { * this.val = val; * this.left = left; * this.right = right; * }; *//** *原创 2022-02-18 13:46:18 · 658 阅读 · 0 评论 -
剑指 Offer 35. 复杂链表的复制(javascript)
一、题目地址https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/二、具体代码// Definition for a Node.// function Node(val, next, random) {// this.val = val;// this.next = next;// this.random = random;// };/** * @param {Node} head *原创 2022-02-17 18:16:33 · 545 阅读 · 0 评论 -
leetcode 6. Z 字形变换
一、题目地址https://leetcode-cn.com/problems/zigzag-conversion/二、具体代码/** * @param {string} s * @param {number} numRows * @return {string} */// 时间复杂度:O(n)// 空间复杂度:O(n)var convert = function(s, numRows) { // 特殊情况判断 if(numRows < 2) { re原创 2022-02-15 09:49:33 · 236 阅读 · 0 评论 -
剑指 Offer 34. 二叉树中和为某一值的路径
一、题目地址https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/二、具体代码/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===u原创 2022-02-14 09:12:27 · 226 阅读 · 0 评论 -
剑指 Offer 43. 1~n 整数中 1 出现的次数(javascript)
一、题目地址https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof/二、具体代码/** * @param {number} n * @return {number} */// 时间复杂度: O(logn)// 空间复杂度: O(1)var countDigitOne = function(n) { let res = 0; let digit = 1; let high = Math原创 2022-02-01 16:04:20 · 284 阅读 · 0 评论 -
剑指 Offer 40. 最小的k个数(javascript)
一、题目地址https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/二、具体代码/** * @param {number[]} arr * @param {number} k * @return {number[]} */// 时间复杂度:O(N)// 时间复杂度:O(logN)var getLeastNumbers = function(arr, k) { if(k >= arr.length) {原创 2022-01-26 13:43:37 · 836 阅读 · 0 评论 -
剑指 Offer 31. 栈的压入、弹出序列(javascript)
一、题目地址https://leetcode-cn.com/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof/二、具体代码/** * @param {number[]} pushed * @param {number[]} popped * @return {boolean} */// 辅助栈// 时间复杂度:O(N)// 空间复杂度:O(N) var validateStackSequences = function(pushed, popped)原创 2022-01-25 09:10:51 · 729 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈(javascript)
一、题目链接https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/二、具体代码/** * initialize your data structure here. */// 时间复杂度:O(1)// 空间复杂度:O(n)var MinStack = function() { this.stackA = []; this.stackB = [];};/** * @param {number}原创 2022-01-19 09:09:18 · 445 阅读 · 0 评论 -
剑指 Offer 20. 表示数值的字符串(javascript)
一、题目地址https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/二、具体代码/** * @param {string} s * @return {boolean} */// 有限状态机// 时间复杂度:O(n)// 空间复杂度:O(1) var isNumber = function(s) { let states = [ new Map().set(' ', 0).set('原创 2022-01-18 09:29:43 · 1100 阅读 · 0 评论 -
剑指 Offer 17. 打印从1到最大的n位数(javascript)
一、题目地址https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/二、具体代码1、未考虑大数问题/** * @param {number} n * @return {number[]} */var printNumbers = function(n) { let end = Math.pow(10, n) - 1; let res = []; for(let i=0; i&l原创 2022-01-17 13:54:15 · 183 阅读 · 0 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面(javascript)
一、题目地址https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/二、具体代码/** * @param {number[]} nums * @return {number[]} */ //首尾双指针法 //时间复杂度:O(N) //时间复杂度:O(1)function swap(nums, left, right) { let tempN原创 2022-01-17 09:38:07 · 505 阅读 · 0 评论 -
剑指 Offer 14- II. 剪绳子 II(javascript)
一、题目地址https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/二、具体代码/** * @param {number} n * @return {number} */// 时间复杂度:O(N)// 空间复杂度:O(1) var cuttingRope = function(n) { if(n <= 3) { return n - 1; } let a = Math.trunc(n / 3原创 2022-01-12 09:12:56 · 201 阅读 · 0 评论 -
剑指 Offer 14- I. 剪绳子(javascript)
一、题目地址https://leetcode-cn.com/problems/jian-sheng-zi-lcof/二、具体代码/** * @param {number} n * @return {number} */// 时间复杂度:O(loga)// 空间复杂度:O(1)var cuttingRope = function(n) { if(n <= 3) { return n - 1; } let a = Math.trunc(n / 3)原创 2022-01-11 09:07:03 · 262 阅读 · 0 评论 -
leetcode 139. 单词拆分(javascript)
一、题目地址https://leetcode-cn.com/problems/word-break/二、具体代码/** * @param {string} s * @param {string[]} wordDict * @return {boolean} */// 记忆化动态规划// 时间复杂度: O(n^2)// 空间复杂度: O(n)var wordBreak = function(s, wordDict) { let len = s.length; let dp原创 2022-01-07 09:27:26 · 590 阅读 · 0 评论 -
剑指 Offer 54. 二叉搜索树的第k大节点(javascript)
一、题目地址https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof/二、具体代码/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param {TreeNode}原创 2022-01-05 09:23:17 · 526 阅读 · 0 评论 -
剑指 Offer II 087. 复原 IP (javascript)
一、题目地址https://leetcode-cn.com/problems/0on3uN/二、具体代码/** * @param {string} s * @return {string[]} */var restoreIpAddresses = function(s) { let result = []; search(s, 1, '', result); return result;};function search(s, n, ipArr, result)原创 2022-01-04 09:46:51 · 526 阅读 · 0 评论 -
剑指 Offer 59 - II. 队列的最大值(javascript)
一、题目地址https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/二、具体代码var MaxQueue = function() { this.queue = []; this.deque = [];};/** * @return {number} */MaxQueue.prototype.max_value = function() { if(this.deque.length !== 0) {原创 2021-12-31 09:35:50 · 296 阅读 · 0 评论 -
leetcode 1027. 最长等差数列(javascript)
一、题目地址https://leetcode-cn.com/problems/longest-arithmetic-subsequence/二、具体代码/** * @param {number[]} nums * @return {number} */// 改进后的动态规划做法// 时间复杂度: O(n^2)// 空间复杂度: O(n) var longestArithSeqLength = function(nums) { let n = nums.length; //原创 2021-12-30 09:32:26 · 406 阅读 · 0 评论 -
leetcode 7. 整数反转(javascript)
一、题目地址https://leetcode-cn.com/problems/reverse-integer/二、具体代码/** * @param {number} x * @return {number} */// 时间复杂度: O(N)// 空间复杂度: O(1) var reverse = function(x) { let res = 0; while(x !== 0) { let tempNum = x % 10; if(res &原创 2021-12-29 09:20:41 · 410 阅读 · 0 评论