<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Codeoh的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Codeoh</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Codeoh]]></copyright><item><title><![CDATA[10. 正则表达式匹配（动态规划）]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/119685297</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/119685297</guid><author>Codeoh</author><pubDate>Fri, 13 Aug 2021 22:47:27 +0800</pubDate><description><![CDATA[package com.mt.wsq.lc.dp;

/**
 * 10. 正则表达式匹配
 *
 * @author wangshiqiang03
 * @date 2021/8/13
 *
 * https://leetcode-cn.com/problems/regular-expression-matching/
 */
public class IsMatch {
    /**
     * 整体思想：化整为零，采用逐个位置进行匹配
     * 定义状态：那些是变化的值，这道题很明显就是s和p]]></description><category></category></item><item><title><![CDATA[二进制运算常用操作]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/119410689</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/119410689</guid><author>Codeoh</author><pubDate>Thu, 05 Aug 2021 10:24:45 +0800</pubDate><description><![CDATA[二进制基本知识



]]></description><category></category></item><item><title><![CDATA[合并k个已排序的链表(分治、优先队列)]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/117536526</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/117536526</guid><author>Codeoh</author><pubDate>Thu, 03 Jun 2021 22:39:06 +0800</pubDate><description><![CDATA[package com.heu.wsq.niuke.top200;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.PriorityQueue;

/**
 * 合并k个已排序的链表
 * @author wsq
 * @date 2021/6/2
 * 描述
 * 合并k个已排序的链表并将其作为一个已排序的链表返回。分析并描述其复杂度。
 * 示例1
 * 输入：
 *      [{1,2,3},{4,]]></description><category></category></item><item><title><![CDATA[foreach 循环里进行元素的 remove操作]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/117528414</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/117528414</guid><author>Codeoh</author><pubDate>Thu, 03 Jun 2021 17:06:10 +0800</pubDate><description><![CDATA[如果要进行remove操作，可以调用迭代器的 remove 方法而不是集合类的 remove 方法。因为如果列表在任何时间从结构上修改创建迭代器之后，以任何方式除非通过迭代器自身remove/add方法，迭代器都将抛出一个ConcurrentModificationException,这就是单线程状态下产生的 fail-fast 机制。

正例
public class ModList {
    public static void main(String[] args) {
        List&.]]></description><category></category></item><item><title><![CDATA[在旋转过的有序数组中寻找目标值]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/117454569</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/117454569</guid><author>Codeoh</author><pubDate>Tue, 01 Jun 2021 21:56:55 +0800</pubDate><description><![CDATA[package com.heu.wsq.niuke.top200;

/**
 * 在旋转过的有序数组中寻找目标值
 * @author wsq
 * @date 2021/6/1
 * 描述
 * 给定一个整数数组nums，按升序排序，数组中的元素各不相同。
 * nums数组在传递给search函数之前，会在预先未知的某个下标 t（0 &lt;= t &lt;= nums.length-1）上进行旋转，让数组变为[nums[t], nums[t+1], ..., nums[nums.length-1],]]></description><category></category></item><item><title><![CDATA[最长递增子序列（动态规划+二分查找）]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/117452051</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/117452051</guid><author>Codeoh</author><pubDate>Tue, 01 Jun 2021 20:39:13 +0800</pubDate><description><![CDATA[package com.heu.wsq.niuke.top200;

/**
 * 最长递增子序列
 * @author wsq
 * @date 2021/6/1
 * 描述
 * 给定数组arr，设长度为n，输出arr的最长递增子序列。（如果有多个答案，请输出其中字典序最小的）
 *
 * 示例1
 * 输入：
 *      [2,1,5,3,6,4,8,9,7]
 * 返回值：
 *      [1,3,4,8,9]
 *
 * 示例2
 * 输入：
 *      [1,2,8,6,4]
 * 返]]></description><category></category></item><item><title><![CDATA[最长回文子串(矩阵型动态规划)]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/117324142</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/117324142</guid><author>Codeoh</author><pubDate>Thu, 27 May 2021 11:02:06 +0800</pubDate><description><![CDATA[package com.heu.wsq.leetcode.a1star;

/**
 * 最长回文子串
 * @author wsq
 * @date 2021/5/27
 * 给你一个字符串 s，找到 s 中最长的回文子串。
 *
 * 示例 1：
 * 输入：s = "babad"
 * 输出："bab"
 * 解释："aba" 同样是符合题意的答案。
 *
 * 示例 2：
 * 输入：s = "cbbd"
 * 输出："bb"
 *
 * 链接：https://leetcode-cn.com/lee]]></description><category></category></item><item><title><![CDATA[剑指 Offer 04. 二维数组中的查找]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/117321956</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/117321956</guid><author>Codeoh</author><pubDate>Thu, 27 May 2021 10:02:33 +0800</pubDate><description><![CDATA[package com.heu.wsq.leetcode.inoffer;

/**
 * 剑指 Offer 04. 二维数组中的查找
 * @author wsq
 * @date 2021/5/27
 * 在一个 n * m 的二维数组中，每一行都按照从左到右递增的顺序排序，
 * 每一列都按照从上到下递增的顺序排序。请完成一个高效的函数，
 * 输入这样的一个二维数组和一个整数，判断数组中是否含有该整数。
 *
 * 示例:
 * 现有矩阵 matrix 如下：
 * [
 *   [1,   4, ]]></description><category></category></item><item><title><![CDATA[堆排序（大顶堆、小顶堆）]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/117320600</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/117320600</guid><author>Codeoh</author><pubDate>Thu, 27 May 2021 09:30:57 +0800</pubDate><description><![CDATA[package com.heu.wsq.basic.sort_algorithm;

import java.util.Arrays;

/**
 * 堆排序
 * @author wsq
 * @date 2021/5/27
 */
public class HeapSort {
    /**
     * 堆排序的思想主要有下面两步：
     * 1. 将无需数组构建成堆的状态（从小到大(大顶堆)，从大到小(小顶堆)）
     * 2. 将堆顶与数组末尾元素交换，然后下沉调整堆顶，重新构建堆状态
]]></description><category></category></item><item><title><![CDATA[5765. 跳跃游戏 VII（动态规划+前缀和优化）]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/117195564</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/117195564</guid><author>Codeoh</author><pubDate>Sun, 23 May 2021 15:10:55 +0800</pubDate><description><![CDATA[package com.heu.wsq.leetcode.zhousai.so3;

/**
 * 5765. 跳跃游戏 VII
 * @author wsq
 * @date 2021/5/23
 * 给你一个下标从 0 开始的二进制字符串 s 和两个整数 minJump 和 maxJump 。一开始，你在下标 0 处，且该位置的值一定为 '0' 。当同时满足如下条件时，你可以从下标 i 移动到下标 j 处：
 * i + minJump &lt;= j &lt;= min(i + maxJump, s.]]></description><category></category></item><item><title><![CDATA[redis基本类型对象编码]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/116862580</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/116862580</guid><author>Codeoh</author><pubDate>Sat, 15 May 2021 21:43:22 +0800</pubDate><description><![CDATA[字符串对象

对象编码方式有三种：
int： 当值为小的整数值，使用long类型存储
embstr：值为简短的字节数组（同样也是SDS，仅调用一次内存分配函数，分配的连续空间，空间中包含redisObject和sdshdr）
raw：底层采用SDS字符串存储（调用两次内存分配函数，分配给redisObject和sdshdr）

编码变更：


列表对象

对象编码方式有三种：
ziplist：列表中所有字符串元素的长度小于64；元素的数量小于512个，使用ziplist
linkedlist：当ziplis]]></description><category></category></item><item><title><![CDATA[链表中的节点每k个一组反转(递归，链表反转)]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/116803276</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/116803276</guid><author>Codeoh</author><pubDate>Fri, 14 May 2021 19:38:38 +0800</pubDate><description><![CDATA[package com.heu.wsq.niuke.top200;

/**
 * 链表中的节点每k个一组反转
 * @author wsq
 * @date 2021/05/14
 *
 * 题目描述
 * 将给出的链表中的节点每k个一组翻转，返回翻转后的链表
 * 如果链表中的节点数不是k的倍数，将最后剩下的节点保持原样
 * 你不能更改节点中的值，只能更改节点本身。
 * 要求空间复杂度 O(1)
 *
 * 例如：
 * 给定的链表是1→2→3→4→5
 * 对于k=2, 你应该返回 2→1→4→3]]></description><category></category></item><item><title><![CDATA[面试题 05.01. 插入（位运算）]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/116736912</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/116736912</guid><author>Codeoh</author><pubDate>Thu, 13 May 2021 09:29:36 +0800</pubDate><description><![CDATA[package com.heu.wsq.leetcode.interview_book;

/**
 * 面试题 05.01. 插入
 * @author wsq
 * @date 2021/5/13
 * 给定两个整型数字 N 与 M，以及表示比特位置的 i 与 j（i &lt;= j，且从 0 位开始计算）。
 * 编写一种方法，使 M 对应的二进制数字插入 N 对应的二进制数字的第 i ~ j 位区域，不足之处用 0 补齐。
 * 具体插入过程如图所示。
 * 题目保证从 i 位到 j 位足以容纳 M]]></description><category></category></item><item><title><![CDATA[1310. 子数组异或查询（前缀和思想）]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/116718860</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/116718860</guid><author>Codeoh</author><pubDate>Wed, 12 May 2021 19:02:50 +0800</pubDate><description><![CDATA[package com.heu.wsq.leetcode.prefix_sum;

/**
 * 1310. 子数组异或查询
 * @author wsq
 * @date 2021/5/12
 * 有一个正整数数组 arr，现给你一个对应的查询数组 queries，其中 queries[i] = [Li, Ri]。
 * 对于每个查询 i，请你计算从 Li 到 Ri 的 XOR 值（即 arr[Li] xor arr[Li+1] xor ... xor arr[Ri]）作为本次查询的结果。
 * 并返回一]]></description><category></category></item><item><title><![CDATA[TOP K问题(大顶堆、分治思想)]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/116529393</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/116529393</guid><author>Codeoh</author><pubDate>Sat, 08 May 2021 15:22:19 +0800</pubDate><description><![CDATA[package com.heu.wsq.niuke.top200;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.PriorityQueue;

/**
 * TOP K问题
 * @author wsq
 * @date 2021/5/8
 * 题目描述
 * 给定一个数组，找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字，则最小的4个数字是1,2,3,4。如果K&gt;数组]]></description><category></category></item><item><title><![CDATA[设计LRU缓存结构]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/116525509</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/116525509</guid><author>Codeoh</author><pubDate>Sat, 08 May 2021 14:02:09 +0800</pubDate><description><![CDATA[package com.heu.wsq.niuke.top200;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 设计LRU缓存结构
 * @author wsq
 * @date 2021/5/8
 * 设计LRU缓存结构，该结构在构造时确定大小，假设大小为K，并有如下两个功能
 * set(key, value)：将记录(key, va]]></description><category></category></item><item><title><![CDATA[面试题 08.06. 汉诺塔问题]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/116465450</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/116465450</guid><author>Codeoh</author><pubDate>Thu, 06 May 2021 23:04:57 +0800</pubDate><description><![CDATA[package com.heu.wsq.leetcode.interview_book;

import java.util.List;

/**
 * 面试题 08.06. 汉诺塔问题
 * @author wsq
 * @date 2021/5/6
 * 在经典汉诺塔问题中，有 3 根柱子及 N 个不同大小的穿孔圆盘，盘子可以滑入任意一根柱子。一开始，所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:
 * (1) 每次只能移动一个盘子;
 * (]]></description><category></category></item><item><title><![CDATA[删除链表中倒数第N个节点（快慢双指针）]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/116428844</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/116428844</guid><author>Codeoh</author><pubDate>Wed, 05 May 2021 19:14:40 +0800</pubDate><description><![CDATA[package com.heu.wsq.niuke.top200;


/**
 * 删除链表中倒数第N个节点
 * @author wsq
 * @date 2021/5/5
 * 题目描述
 * 给定一个链表，删除链表的倒数第 nn 个节点并返回链表的头指针
 * 例如，
 * 给出的链表为: 1\to 2\to 3\to 4\to 51→2→3→4→5, n= 2n=2.
 * 删除了链表的倒数第 nn 个节点之后,链表变为1\to 2\to 3\to 51→2→3→5.
 *
 * 备注：
 * 题]]></description><category></category></item><item><title><![CDATA[面试题 16.07. 最大数值（位运算）]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/116402683</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/116402683</guid><author>Codeoh</author><pubDate>Tue, 04 May 2021 17:19:52 +0800</pubDate><description><![CDATA[package com.heu.wsq.leetcode.interview_book;

/**
 * 面试题 16.07. 最大数值
 * @author wsq
 * @date 2021/5/4
 * 编写一个方法，找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。
 *
 * 示例：
 * 输入： a = 1, b = 2
 * 输出： 2
 */
public class Maximum {
    public int maximum(int a, int b){
  ]]></description><category></category></item><item><title><![CDATA[633. 平方数之和（双指针）]]></title><link>https://blog.youkuaiyun.com/Codeoh/article/details/116243808</link><guid>https://blog.youkuaiyun.com/Codeoh/article/details/116243808</guid><author>Codeoh</author><pubDate>Wed, 28 Apr 2021 21:27:36 +0800</pubDate><description><![CDATA[package com.heu.wsq.leetcode.double_point;

/**
 * 633. 平方数之和
 * @author wsq
 * @date 2021/4/28
 * 给定一个非负整数 c ，你要判断是否存在两个整数 a 和 b，使得 a2 + b2 = c。
 *
 * 示例 1：
 * 输入：c = 5
 * 输出：true
 * 解释：1 * 1 + 2 * 2 = 5
 *
 * 示例 2：
 * 输入：c = 3
 * 输出：false
 *
 * 链接：https:]]></description><category></category></item></channel></rss>