<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[James_chok的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/James_chok</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; James_chok]]></copyright><item><title><![CDATA[leetcode 5. 最长回文子串]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/119084852</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/119084852</guid><author>James_chok</author><pubDate>Sun, 25 Jul 2021 18:04:27 +0800</pubDate><description><![CDATA[leetcode 5. 最长回文子串

解题思路
执行用时552ms。
基本思路是动态规划算法，对二维数组进行填表
定义：
i = 左边界
j = 右边界
dp[i][j] = i到j的子串是否为回文子串
由此可得递推公式：dp[i][j] = (dp[i+1][j-1] &amp;&amp; s[i] == s[j]) ? true : false
初始化二维数组，遍历二维数组的关键点：以列j为基准，对行i进行遍历，并且i &lt; j。





j = 0
j = 1
j = 2
j = 3




]]></description><category></category></item><item><title><![CDATA[macOS的私钥签名随笔]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/116568915</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/116568915</guid><author>James_chok</author><pubDate>Sun, 09 May 2021 19:32:39 +0800</pubDate><description><![CDATA[MacOS的私钥签名随笔
RSA的加密、解密、签名参考Objective-C-RSA
把NSString转化成SecKeyRef参考CocoaCryptoMac
以下代码引用自iOS和MacOSX上的私钥签名不同
- (NSData *)signatureWithKey:(SecKeyRef)keyRef {

    if (keyRef == NULL) {
        return nil;
    }

    NSData *sha1Digest = [self dataWithSHA1Dig]]></description><category></category></item><item><title><![CDATA[leetcode 8. 字符串转换整数 (atoi)]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/103406672</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/103406672</guid><author>James_chok</author><pubDate>Thu, 05 Dec 2019 16:17:56 +0800</pubDate><description><![CDATA[leetcode 8. 字符串转换整数 (atoi)

题意
给定一个排序链表，删除所有重复的元素，使得每个元素只出现一次。
示例 1:
输入: 1-&gt;1-&gt;2
输出: 1-&gt;2
示例 2:
输入: 1-&gt;1-&gt;2-&gt;3-&gt;3
输出: 1-&gt;2-&gt;3

解题思路
用 p 记录当前节点。用 iter 作为迭代器，寻找下一个与 p 不相等的节点，并...]]></description><category></category></item><item><title><![CDATA[快速排序/快排（Python3）]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/101509847</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/101509847</guid><author>James_chok</author><pubDate>Fri, 27 Sep 2019 08:44:03 +0800</pubDate><description><![CDATA[快排的Python3实现方法
A = [-1, 3, -2, 4, -5];

def quicksort(A: int, left: int, right: int):
    if left &gt; right:
        return;
    i = left;
    j = right;
    x = A[left];
    while i &lt; j:
        ...]]></description><category></category></item><item><title><![CDATA[寻找数组中第K大的数字-快排解法（Python3）]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/101467801</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/101467801</guid><author>James_chok</author><pubDate>Thu, 26 Sep 2019 19:42:33 +0800</pubDate><description><![CDATA[给定一个数组A，寻找第k大的数字。
本质上是查询操作，但是却使用到快排思想（即分治）
A = [-1, 3, -2, 4, -5];

def partition(A: int, low: int, high: int) -&gt; int:
    temp = A[low];
    while low &lt; high:
        while low &lt; high and te...]]></description><category></category></item><item><title><![CDATA[leetcode 82. 删除排序链表中的重复元素 Ⅱ]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/84786729</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/84786729</guid><author>James_chok</author><pubDate>Tue, 04 Dec 2018 12:54:33 +0800</pubDate><description><![CDATA[leetcode 82. 删除排序链表中的重复元素 Ⅱ

题意
给定一个排序链表，删除所有含有重复数字的节点，只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1-&amp;gt;2-&amp;gt;3-&amp;gt;3-&amp;gt;4-&amp;gt;4-&amp;gt;5
输出: 1-&amp;gt;2-&amp;gt;5
示例 2:
输入: 1-&amp;gt;1-&amp;gt;1-&amp;gt;2-&amp;gt;3
输出: 2-&amp;gt;3

解题思路
用 哈希...]]></description><category></category></item><item><title><![CDATA[leetcode 83. 删除排序链表中的重复元素]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/84571903</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/84571903</guid><author>James_chok</author><pubDate>Tue, 27 Nov 2018 19:25:19 +0800</pubDate><description><![CDATA[leetcode 83. 删除排序链表中的重复元素

题意
给定一个排序链表，删除所有重复的元素，使得每个元素只出现一次。
示例 1:
输入: 1-&amp;gt;1-&amp;gt;2
输出: 1-&amp;gt;2
示例 2:
输入: 1-&amp;gt;1-&amp;gt;2-&amp;gt;3-&amp;gt;3
输出: 1-&amp;gt;2-&amp;gt;3

解题思路
用 p 记录当前节点。用 iter 作为迭代器，寻找下一个与 p 不相等的节点，并把...]]></description><category></category></item><item><title><![CDATA[leetcode 78. 集合]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/84308150</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/84308150</guid><author>James_chok</author><pubDate>Tue, 20 Nov 2018 19:11:43 +0800</pubDate><description><![CDATA[leetcode 78. 集合

题意
给定一组不含重复元素的整数数组 nums，返回该数组所有可能的子集（幂集）。
说明：解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]

解题思路
求解全排列的通法，使用回溯和递归的思想。

代码
class Solution ...]]></description><category></category></item><item><title><![CDATA[leetcode 77. 组合]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/84037818</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/84037818</guid><author>James_chok</author><pubDate>Tue, 13 Nov 2018 22:44:10 +0800</pubDate><description><![CDATA[leetcode 77. 组合

题意
给定两个整数 n 和 k，返回 1 … n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]

解题思路
求解全排列的通法，使用回溯和递归的思想。

代码
class Solution {
    public List&amp;lt;List...]]></description><category></category></item><item><title><![CDATA[leetcode 63. 不同路径 Ⅱ]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/83817893</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/83817893</guid><author>James_chok</author><pubDate>Wed, 07 Nov 2018 09:30:32 +0800</pubDate><description><![CDATA[leetcode 63. 不同路径 Ⅱ

题意
一个机器人位于一个 m x n 网格的左上角 （起始点在下图中标记为“Start” ）。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角（在下图中标记为“Finish”）。
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径？

网格中的障碍物和空位置分别用 1 和 0 来表示。
说明：m 和 n 的值均不超过 100...]]></description><category></category></item><item><title><![CDATA[leetcode 64. 最小路径和]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/83546747</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/83546747</guid><author>James_chok</author><pubDate>Tue, 30 Oct 2018 18:41:53 +0800</pubDate><description><![CDATA[leetcode 64. 最小路径和

题意
给定一个包含非负整数的 m x n 网格，请找出一条从左上角到右下角的路径，使得路径上的数字总和为最小。
说明：每次只能向下或者向右移动一步。
示例:
输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小

解题思路
使用动态规划的思想，用 path[m][n] 表示m x n...]]></description><category></category></item><item><title><![CDATA[leetcode 62. 不同路径]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/83383747</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/83383747</guid><author>James_chok</author><pubDate>Thu, 25 Oct 2018 17:56:42 +0800</pubDate><description><![CDATA[leetcode 62. 不同路径

题意
一个机器人位于一个 m x n 网格的左上角 （起始点在下图中标记为“Start” ）。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角（在下图中标记为“Finish”）。
问总共有多少条不同的路径？

例如，上图是一个7 x 3 的网格。有多少可能的路径？
说明：m 和 n 的值均不超过 100。
示例 1:
输入: m = 3, n ...]]></description><category></category></item><item><title><![CDATA[leetcode 50. Pow(x, n)]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/83066573</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/83066573</guid><author>James_chok</author><pubDate>Mon, 15 Oct 2018 23:36:43 +0800</pubDate><description><![CDATA[leetcode 50. Pow(x, n)

题意
实现 pow(x, n) ，即计算 x 的 n 次幂函数。

解题思路
使用递归计算x 的 n 次幂，可以避免超时。

代码
class Solution {
    public double myPow(double x, int n) {
        if (n &amp;lt; 0)
        {
            return...]]></description><category></category></item><item><title><![CDATA[leetcode 23. 合并K个排序链表]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/83066369</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/83066369</guid><author>James_chok</author><pubDate>Mon, 15 Oct 2018 23:11:39 +0800</pubDate><description><![CDATA[leetcode 23. 合并K个排序链表

题意
合并 k 个排序链表，返回合并后的排序链表。请分析和描述算法的复杂度。

解题思路
先定义mergeTwoLists函数，该函数使用归并排序对 lists1 和 lists2 两个链表进行排序，得到一个新的链表 lists3 。对 lists 中的链表进行两两排序，最终得到一个排好序的链表。

代码
/**
 * Definition for s...]]></description><category></category></item><item><title><![CDATA[leetcode 4. 两个排序数组的中位数]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/83010887</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/83010887</guid><author>James_chok</author><pubDate>Thu, 11 Oct 2018 12:59:50 +0800</pubDate><description><![CDATA[leetcode 4. 两个排序数组的中位数

题意
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。
你可以假设 nums1 和 nums2 不同时为空。

解题思路
使用归并排序把 nums1 和 nums2 两个有序数组结合起来，得到一个有序数组 nums3 。nums3 的中位数即为所...]]></description><category></category></item><item><title><![CDATA[leetcode 11. 盛最多水的容器]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/82936581</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/82936581</guid><author>James_chok</author><pubDate>Thu, 04 Oct 2018 12:02:51 +0800</pubDate><description><![CDATA[leetcode 11. 盛最多水的容器

题意
给定 n 个非负整数 a1，a2，…，an，每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线，垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明：你不能倾斜容器，且 n 的值至少为 2。

图中垂直线代表输入数组 [1,8,6,2,5,4,8...]]></description><category></category></item><item><title><![CDATA[leetcode 53. 最大子序和]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/82904628</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/82904628</guid><author>James_chok</author><pubDate>Sun, 30 Sep 2018 07:14:52 +0800</pubDate><description><![CDATA[leetcode 53. 最大子序和

题意
给定一个整数数组 nums ，找到一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。

解题思路
以nums数组的每一个元素作为子数组的起始元素，计算所有可能的子数组的和，并找到最大和，即为所求。

代码
class Solution {
    public int maxSubArray(int[] nums) {
       ...]]></description><category></category></item><item><title><![CDATA[leetcode 3. 无重复字符的最长子串]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/82793225</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/82793225</guid><author>James_chok</author><pubDate>Thu, 20 Sep 2018 20:44:30 +0800</pubDate><description><![CDATA[leetcode 3. 无重复字符的最长子串

####题意
给定一个字符串，找出不含有重复字符的最长子串的长度。

####解题思路
先建立一个临时String为temp，然后遍历字符串，把字符串中的字母加到temp中，作为temp的第一个字母。从当前字母的下一个字母开始遍历字符串，判断每一个字母是否已经存在于temp中，如果不存在，则添加到temp中，继续遍历下一个字母，如果存在则终止该循环，...]]></description><category></category></item><item><title><![CDATA[leetcode 2. 两数相加]]></title><link>https://blog.youkuaiyun.com/James_chok/article/details/82710809</link><guid>https://blog.youkuaiyun.com/James_chok/article/details/82710809</guid><author>James_chok</author><pubDate>Sat, 15 Sep 2018 09:04:51 +0800</pubDate><description><![CDATA[leetcode 2. 两数相加





题意

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储，它们的每个节点只存储单个数字。将两数相加返回一个新的链表。





解题思路

先建立一个表头（该表头只是为了方便添加数字，真正的数字从表头的下一个节点开始），然后同时遍历两个链表，并用carry表示是否进位。因此，每一位的数字都可以用l1.val + l2.val + carry表示。...]]></description><category></category></item></channel></rss>