<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[codrab的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/codrab</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; codrab]]></copyright><item><title><![CDATA[283-移动零]]></title><link>https://blog.csdn.net/codrab/article/details/122817362</link><guid>https://blog.csdn.net/codrab/article/details/122817362</guid><author>codrab</author><pubDate>Tue, 08 Feb 2022 04:48:16 +0800</pubDate><description><![CDATA[题目
给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
请注意 ，必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
题解 双指针一次遍历
var moveZeroes = function(nums) {
    let left=0,right=0
    while(right&lt;nums.length){
]]></description><category></category></item><item><title><![CDATA[240-搜索二维矩阵 II]]></title><link>https://blog.csdn.net/codrab/article/details/122817347</link><guid>https://blog.csdn.net/codrab/article/details/122817347</guid><author>codrab</author><pubDate>Tue, 08 Feb 2022 03:59:10 +0800</pubDate><description><![CDATA[题目
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性：
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
示例 1：
输入：matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出：true
示例 2：
输入：matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6]]></description><category></category></item><item><title><![CDATA[238-除自身以外数组的乘积]]></title><link>https://blog.csdn.net/codrab/article/details/122815994</link><guid>https://blog.csdn.net/codrab/article/details/122815994</guid><author>codrab</author><pubDate>Mon, 07 Feb 2022 22:47:56 +0800</pubDate><description><![CDATA[题目
给你一个整数数组 nums，返回 数组 answer ，其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。
题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内。
请不要使用除法，且在 O(n) 时间复杂度内完成此题。
示例 1:
输入: nums = [1,2,3,4]
输出: [24,12,8,6]
示例 2:
输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]
题解
var produ]]></description><category></category></item><item><title><![CDATA[236-二叉树的最近公共祖先]]></title><link>https://blog.csdn.net/codrab/article/details/122815263</link><guid>https://blog.csdn.net/codrab/article/details/122815263</guid><author>codrab</author><pubDate>Mon, 07 Feb 2022 21:46:04 +0800</pubDate><description><![CDATA[题目
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为：“对于有根树 T 的两个节点 p、q，最近公共祖先表示为一个节点 x，满足 x 是 p、q 的祖先且 x 的深度尽可能大（一个节点也可以是它自己的祖先）。”
示例 1：
输入：root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出：3
解释：节点 5 和节点 1 的最近公共祖先是节点 3 。
示例 2：
输入：root = [3,5,1,6,2,0,8,null]]></description><category></category></item><item><title><![CDATA[234-回文链表]]></title><link>https://blog.csdn.net/codrab/article/details/122813837</link><guid>https://blog.csdn.net/codrab/article/details/122813837</guid><author>codrab</author><pubDate>Mon, 07 Feb 2022 19:51:22 +0800</pubDate><description><![CDATA[题目
给你一个单链表的头节点 head ，请你判断该链表是否为回文链表。如果是，返回 true ；否则，返回 false 。
示例 1：
输入：head = [1,2,2,1]
输出：true
示例 2：
输入：head = [1,2]
输出：false
题解一 数组
var isPalindrome = function(head) {
    const vals = [];
    while (head !== null) {
        vals.push(head.val);
       ]]></description><category></category></item><item><title><![CDATA[226-翻转二叉树]]></title><link>https://blog.csdn.net/codrab/article/details/122803830</link><guid>https://blog.csdn.net/codrab/article/details/122803830</guid><author>codrab</author><pubDate>Mon, 07 Feb 2022 03:21:44 +0800</pubDate><description><![CDATA[题目
给你一棵二叉树的根节点 root ，翻转这棵二叉树，并返回其根节点。
示例 1：
输入：root = [4,2,7,1,3,6,9]
输出：[4,7,2,9,6,3,1]
示例 2：
输入：root = [2,1,3]
输出：[2,3,1]
示例 3：
输入：root = []
输出：[]
题解 DFS!
var invertTree = function(root) {
    if (root === null) {
        return null;
    }
    const lef]]></description><category></category></item><item><title><![CDATA[221-最大正方形]]></title><link>https://blog.csdn.net/codrab/article/details/122803827</link><guid>https://blog.csdn.net/codrab/article/details/122803827</guid><author>codrab</author><pubDate>Mon, 07 Feb 2022 03:09:44 +0800</pubDate><description><![CDATA[题目
在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内，找到只包含 ‘1’ 的最大正方形，并返回其面积。
示例 1：
输入：matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]
输出：4
示例 2：
输入：matrix = [[“0”,“1”],[“1”,“0”]]
输出：1
示例 3：
输入：matrix = [[“0”]]
输出：0
题解
const maxima]]></description><category></category></item><item><title><![CDATA[215-数组中的第K个最大元素]]></title><link>https://blog.csdn.net/codrab/article/details/122800779</link><guid>https://blog.csdn.net/codrab/article/details/122800779</guid><author>codrab</author><pubDate>Sun, 06 Feb 2022 19:32:11 +0800</pubDate><description><![CDATA[题目
给定整数数组 nums 和整数 k，请返回数组中第 k 个最大的元素。
请注意，你需要找的是数组排序后的第 k 个最大的元素，而不是第 k 个不同的元素。
示例 1:
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
示例 2:
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
题解一 堆排序
var findKthLargest = function(nums, k) {
   let heapSize=nums.length
    buildMaxHeap]]></description><category></category></item><item><title><![CDATA[208-实现 Trie (前缀树)]]></title><link>https://blog.csdn.net/codrab/article/details/122787663</link><guid>https://blog.csdn.net/codrab/article/details/122787663</guid><author>codrab</author><pubDate>Sat, 05 Feb 2022 01:37:24 +0800</pubDate><description><![CDATA[题目
Trie（发音类似 “try”）或者说 前缀树 是一种树形数据结构，用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景，例如自动补完和拼写检查。
请你实现 Trie 类：
Trie() 初始化前缀树对象。
void insert(String word) 向前缀树中插入字符串 word 。
boolean search(String word) 如果字符串 word 在前缀树中，返回 true（即，在检索之前已经插入）；否则，返回 false 。
boolean startsWit]]></description><category></category></item><item><title><![CDATA[207-课程表]]></title><link>https://blog.csdn.net/codrab/article/details/122778683</link><guid>https://blog.csdn.net/codrab/article/details/122778683</guid><author>codrab</author><pubDate>Thu, 03 Feb 2022 20:53:14 +0800</pubDate><description><![CDATA[题目
你这个学期必须选修 numCourses 门课程，记为 0 到 numCourses - 1 。
在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出，其中 prerequisites[i] = [ai, bi] ，表示如果要学习课程 ai 则 必须 先学习课程  bi 。
例如，先修课程对 [0, 1] 表示：想要学习课程 0 ，你需要先完成课程 1 。
请你判断是否可能完成所有课程的学习？如果可以，返回 true ；否则，返回 false 。
示例 1：
输入：n]]></description><category></category></item><item><title><![CDATA[200-岛屿数量]]></title><link>https://blog.csdn.net/codrab/article/details/122777393</link><guid>https://blog.csdn.net/codrab/article/details/122777393</guid><author>codrab</author><pubDate>Thu, 03 Feb 2022 17:50:08 +0800</pubDate><description><![CDATA[题目
给你一个由 ‘1’（陆地）和 ‘0’（水）组成的的二维网格，请你计算网格中岛屿的数量。
岛屿总是被水包围，并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外，你可以假设该网格的四条边均被水包围。
示例 1：
输入：grid = [
[“1”,“1”,“1”,“1”,“0”],
[“1”,“1”,“0”,“1”,“0”],
[“1”,“1”,“0”,“0”,“0”],
[“0”,“0”,“0”,“0”,“0”]
]
输出：1
示例 2：
输入：grid = [
[“1”,“1”,“0”]]></description><category></category></item><item><title><![CDATA[169-多数元素]]></title><link>https://blog.csdn.net/codrab/article/details/122767678</link><guid>https://blog.csdn.net/codrab/article/details/122767678</guid><author>codrab</author><pubDate>Wed, 02 Feb 2022 04:18:06 +0800</pubDate><description><![CDATA[题目
给定一个大小为 n 的数组，找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的，并且给定的数组总是存在多数元素。
示例 1：
输入：[3,2,3]
输出：3
示例 2：
输入：[2,2,1,1,1,2,2]
输出：2
题解一 哈希表计数
var majorityElement = function(nums) {
  const len = nums.length,
  half = len / 2,
  m = new Map();
  for ]]></description><category></category></item><item><title><![CDATA[160-相交链表]]></title><link>https://blog.csdn.net/codrab/article/details/122767666</link><guid>https://blog.csdn.net/codrab/article/details/122767666</guid><author>codrab</author><pubDate>Wed, 02 Feb 2022 03:06:54 +0800</pubDate><description><![CDATA[题目
给你两个单链表的头节点 headA 和 headB ，请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点，返回 null 。
图示两个链表在节点 c1 开始相交：
题目数据 保证 整个链式结构中不存在环。
注意，函数返回结果后，链表必须 保持其原始结构 。
自定义评测：
评测系统 的输入如下（你设计的程序 不适用 此输入）：
intersectVal - 相交的起始节点的值。如果不存在相交节点，这一值为 0
listA - 第一个链表
listB - 第二个链表
skipA - 在 l]]></description><category></category></item><item><title><![CDATA[152-乘积最大子数组]]></title><link>https://blog.csdn.net/codrab/article/details/122766676</link><guid>https://blog.csdn.net/codrab/article/details/122766676</guid><author>codrab</author><pubDate>Tue, 01 Feb 2022 22:20:14 +0800</pubDate><description><![CDATA[题目
给你一个整数数组 nums ，请你找出数组中乘积最大的连续子数组（该子数组中至少包含一个数字），并返回该子数组所对应的乘积。
示例 1:
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
题解 动态规划
var maxProduct = (nums) =&gt; {
  let res = nums[0]
  let prevMin = nums[0]]]></description><category></category></item><item><title><![CDATA[148-排序链表]]></title><link>https://blog.csdn.net/codrab/article/details/122765721</link><guid>https://blog.csdn.net/codrab/article/details/122765721</guid><author>codrab</author><pubDate>Tue, 01 Feb 2022 19:49:25 +0800</pubDate><description><![CDATA[题目
给你链表的头结点 head ，请将其按 升序 排列并返回 排序后的链表 。
示例 1：
输入：head = [4,2,1,3]
输出：[1,2,3,4]
示例 2：
输入：head = [-1,5,3,4,0]
输出：[-1,0,3,4,5]
示例 3：
输入：head = []
输出：[]
题解
// 归并排序
var sortList = function (head) {
  if (!head || head.next === null) return head;
  // 使用快慢指针找到中]]></description><category></category></item><item><title><![CDATA[146-LRU 缓存]]></title><link>https://blog.csdn.net/codrab/article/details/122466046</link><guid>https://blog.csdn.net/codrab/article/details/122466046</guid><author>codrab</author><pubDate>Thu, 13 Jan 2022 03:37:59 +0800</pubDate><description><![CDATA[题目
请你设计并实现一个满足  LRU (最近最少使用) 缓存 约束的数据结构。
实现 LRUCache 类：
LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存
int get(int key) 如果关键字 key 存在于缓存中，则返回关键字的值，否则返回 -1 。
void put(int key, int value) 如果关键字 key 已经存在，则变更其数据值 value ；如果不存在，则向缓存中插入该组 key-value 。如果插入操作导]]></description><category></category></item><item><title><![CDATA[142-环形链表 II]]></title><link>https://blog.csdn.net/codrab/article/details/122445182</link><guid>https://blog.csdn.net/codrab/article/details/122445182</guid><author>codrab</author><pubDate>Wed, 12 Jan 2022 02:21:35 +0800</pubDate><description><![CDATA[题目
给定一个链表，返回链表开始入环的第一个节点。 如果链表无环，则返回 null。
如果链表中有某个节点，可以通过连续跟踪 next 指针再次到达，则链表中存在环。 为了表示给定链表中的环，评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置（索引从 0 开始）。如果 pos 是 -1，则在该链表中没有环。注意：pos 不作为参数进行传递，仅仅是为了标识链表的实际情况。
不允许修改 链表。
示例 1：
输入：head = [3,2,0,-4], pos = 1
输出：返回索引为 1 的链表节点
解]]></description><category></category></item><item><title><![CDATA[141-环形链表]]></title><link>https://blog.csdn.net/codrab/article/details/122375544</link><guid>https://blog.csdn.net/codrab/article/details/122375544</guid><author>codrab</author><pubDate>Sat, 08 Jan 2022 03:26:38 +0800</pubDate><description><![CDATA[题目
给你一个链表的头节点 head ，判断链表中是否有环。
如果链表中有某个节点，可以通过连续跟踪 next 指针再次到达，则链表中存在环。 为了表示给定链表中的环，评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置（索引从 0 开始）。如果 pos 是 -1，则在该链表中没有环。注意：pos 不作为参数进行传递，仅仅是为了标识链表的实际情况。
如果链表中存在环，则返回 true 。 否则，返回 false 。
示例 1：
输入：head = [3,2,0,-4], pos = 1
输出：tru]]></description><category></category></item><item><title><![CDATA[139-单词拆分]]></title><link>https://blog.csdn.net/codrab/article/details/122243563</link><guid>https://blog.csdn.net/codrab/article/details/122243563</guid><author>codrab</author><pubDate>Thu, 30 Dec 2021 19:03:22 +0800</pubDate><description><![CDATA[题目
给你一个字符串 s 和一个字符串列表 wordDict 作为字典，判定 s 是否可以由空格拆分为一个或多个在字典中出现的单词。
说明：拆分时可以重复使用字典中的单词。
示例 1：
输入: s = “leetcode”, wordDict = [“leet”, “code”]
输出: true
解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。
示例 2：
输入: s = “applepenapple”, wordDict = [“apple”, “pen”]
输]]></description><category></category></item><item><title><![CDATA[206-反转链表]]></title><link>https://blog.csdn.net/codrab/article/details/121689491</link><guid>https://blog.csdn.net/codrab/article/details/121689491</guid><author>codrab</author><pubDate>Fri, 03 Dec 2021 00:07:00 +0800</pubDate><description><![CDATA[题目
给你单链表的头节点 head ，请你反转链表，并返回反转后的链表。
示例 1：
输入：head = [1,2,3,4,5]
输出：[5,4,3,2,1]
示例 2：
输入：head = [1,2]
输出：[2,1]
示例 3：
输入：head = []
输出：[]
题解一 迭代
var reverseList = function(head) {
    let prev = null;
    let curr = head;
    while (curr) {
        const nex]]></description><category></category></item></channel></rss>