<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[one_zero_one的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/one_zero_one</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; one_zero_one]]></copyright><item><title><![CDATA[算法排序-go]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/138814419</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/138814419</guid><author>one_zero_one</author><pubDate>Mon, 13 May 2024 18:33:12 +0800</pubDate><description><![CDATA[局部变量」**分配的存储空间两个部分。我们用 S(n)=O(f(n))来定义，其中n为问题的规模(或大小)。通常来说，只要算法不涉及到动态分配的空间，以及递归、栈所需的空间，空间复杂度通常为0(1)。一个一维数组。]]></description><category></category></item><item><title><![CDATA[剑指 Offer 60. n个骰子的点数]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119683379</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119683379</guid><author>one_zero_one</author><pubDate>Fri, 13 Aug 2021 20:17:43 +0800</pubDate><description><![CDATA[难度中等279

把n个骰子扔在地上，所有骰子朝上一面的点数之和为s。输入n，打印出s的所有可能的值出现的概率。



你需要用一个浮点数数组返回答案，其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。



示例 1:


输入: 1
输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]


示例2:


输入: 2
输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.166...]]></description><category></category></item><item><title><![CDATA[剑指 Offer 68 - I. 二叉搜索树的最近公共祖先]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119683083</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119683083</guid><author>one_zero_one</author><pubDate>Fri, 13 Aug 2021 19:57:39 +0800</pubDate><description><![CDATA[难度简单154

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为：“对于有根树 T 的两个结点 p、q，最近公共祖先表示为一个结点 x，满足 x 是 p、q 的祖先且 x 的深度尽可能大（一个节点也可以是它自己的祖先）。”

例如，给定如下二叉搜索树: root =[6,2,8,0,4,7,9,null,null,3,5]





示例 1:


输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q =...]]></description><category></category></item><item><title><![CDATA[剑指 Offer 55 - II. 平衡二叉树]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119682756</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119682756</guid><author>one_zero_one</author><pubDate>Fri, 13 Aug 2021 19:35:22 +0800</pubDate><description><![CDATA[难度简单180

输入一棵二叉树的根节点，判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1，那么它就是一棵平衡二叉树。



示例 1:

给定二叉树[3,9,20,null,null,15,7]


    3
   / \
  9  20
    /  \
   15   7

返回true。示例 2:

给定二叉树[1,2,2,3,3,null,null,4,4]


       1
      / \
     2   2
    / \
   3   3
...]]></description><category></category></item><item><title><![CDATA[剑指 Offer 66. 构建乘积数组]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119678020</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119678020</guid><author>one_zero_one</author><pubDate>Fri, 13 Aug 2021 16:16:43 +0800</pubDate><description><![CDATA[难度中等142

给定一个数组A[0,1,…,n-1]，请构建一个数组B[0,1,…,n-1]，其中B[i]的值是数组A中除了下标i以外的元素的积, 即B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。



示例:


输入: [1,2,3,4,5]
输出: [120,60,40,30,24]


class Solution:
    def constructArr(self, a: List[int]) -&gt; List[int]...]]></description><category></category></item><item><title><![CDATA[剑指 Offer 59 - II. 队列的最大值]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119676991</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119676991</guid><author>one_zero_one</author><pubDate>Fri, 13 Aug 2021 15:35:18 +0800</pubDate><description><![CDATA[难度中等270

请定义一个队列并实现函数max_value得到队列里的最大值，要求函数max_value、push_back和pop_front的均摊时间复杂度都是O(1)。

若队列为空，pop_front和max_value需要返回 -1

示例 1：


输入: 
["MaxQueue","push_back","push_back","max_value","pop_front","max_value"]
[[],[1],[2],[],[],[]]
输出:[null,null...]]></description><category></category></item><item><title><![CDATA[剑指 Offer 44. 数字序列中某一位的数字]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119675756</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119675756</guid><author>one_zero_one</author><pubDate>Fri, 13 Aug 2021 15:02:49 +0800</pubDate><description><![CDATA[难度中等157

数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中，第5位（从下标0开始计数）是5，第13位是1，第19位是4，等等。

请写一个函数，求任意第n位对应的数字。



示例 1：


输入：n = 3
输出：3


示例 2：


输入：n = 11
输出：0




class Solution:
    def findNthDigit(self, n: int) -&gt; int:

        start,digit,count..]]></description><category></category></item><item><title><![CDATA[剑指 Offer 54. 二叉搜索树的第k大节点]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119656442</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119656442</guid><author>one_zero_one</author><pubDate>Thu, 12 Aug 2021 23:31:20 +0800</pubDate><description><![CDATA[难度简单188

给定一棵二叉搜索树，请找出其中第k大的节点。



示例 1:


输入: root = [3,1,4,null,2], k = 1
   3
  / \
 1   4
  \
  2
输出: 4


#右》根》左
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
# ...]]></description><category></category></item><item><title><![CDATA[剑指 Offer 48. 最长不含重复字符的子字符串]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119656088</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119656088</guid><author>one_zero_one</author><pubDate>Thu, 12 Aug 2021 23:06:23 +0800</pubDate><description><![CDATA[难度中等255

请从字符串中找出一个最长的不包含重复字符的子字符串，计算该最长子字符串的长度。



示例1:


输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。


class Solution:
    def lengthOfLongestSubstring(self, s: str) -&gt; int:
        
        d={}
        i=-1
        num=0
        for j...]]></description><category></category></item><item><title><![CDATA[剑指 Offer 41. 数据流中的中位数]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119655621</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119655621</guid><author>one_zero_one</author><pubDate>Thu, 12 Aug 2021 22:38:08 +0800</pubDate><description><![CDATA[难度困难167

如何得到一个数据流中的中位数？如果从数据流中读出奇数个数值，那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值，那么中位数就是所有数值排序之后中间两个数的平均值。

例如，

[2,3,4]的中位数是 3

[2,3] 的中位数是 (2 + 3) / 2 = 2.5

设计一个支持以下两种操作的数据结构：

void addNum(int num) - 从数据流中添加一个整数到数据结构中。
	double findMedian() - 返回目前所有元素的中位数...]]></description><category></category></item><item><title><![CDATA[剑指 Offer 40. 最小的k个数]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119654958</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119654958</guid><author>one_zero_one</author><pubDate>Thu, 12 Aug 2021 22:04:19 +0800</pubDate><description><![CDATA[难度简单281

输入整数数组arr，找出其中最小的k个数。例如，输入4、5、1、6、2、7、3、8这8个数字，则最小的4个数字是1、2、3、4。



示例 1：


输入：arr = [3,2,1], k = 2
输出：[1,2] 或者 [2,1]


示例 2：


输入：arr = [0,1,2,1], k = 1
输出：[0]





#    一个容器里面放k个数，这k个数排序，第k个最大，当外面的数小于第k个数时，容器删除第k个数，加入外面的数 #     python3只有最小...]]></description><category></category></item><item><title><![CDATA[剑指 Offer 53 - II. 0～n-1中缺失的数字]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119652484</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119652484</guid><author>one_zero_one</author><pubDate>Thu, 12 Aug 2021 19:56:14 +0800</pubDate><description><![CDATA[难度简单156

一个长度为n-1的递增排序数组中的所有数字都是唯一的，并且每个数字都在范围0～n-1之内。在范围0～n-1内的n个数字中有且只有一个数字不在该数组中，请找出这个数字。



示例 1:


输入: [0,1,3]
输出: 2


示例2:


输入: [0,1,2,3,4,5,6,7,9]
输出: 8




#二分法
class Solution:
    def missingNumber(self, nums: List[int]) -&gt; int:
        i=0...]]></description><category></category></item><item><title><![CDATA[剑指 Offer 65. 不用加减乘除做加法]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119650467</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119650467</guid><author>one_zero_one</author><pubDate>Thu, 12 Aug 2021 18:01:17 +0800</pubDate><description><![CDATA[难度简单202

写一个函数，求两个整数之和，要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。



示例:


输入: a = 1, b = 1
输出: 2








class Solution:
    def add(self, a: int, b: int) -&gt; int:
           
        x=0xffffffff # 考虑负数的存在
        a=a &amp; x
        b=b &amp; x
        wh...]]></description><category></category></item><item><title><![CDATA[统计一个数字在排序数组中出现的次数。]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119648190</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119648190</guid><author>one_zero_one</author><pubDate>Thu, 12 Aug 2021 16:48:23 +0800</pubDate><description><![CDATA[示例 1:

输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例2:

输入: nums = [5,7,7,8,8,10], target = 6
输出: 0


#二分法
class Solution:
    def search(self, nums: [int], target: int) -&gt; int:
        def helper(tar):
            i, j = 0, len(nums) - 1
        ...]]></description><category></category></item><item><title><![CDATA[剑指 Offer 58 - I. 翻转单词顺序]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119646757</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119646757</guid><author>one_zero_one</author><pubDate>Thu, 12 Aug 2021 16:05:30 +0800</pubDate><description><![CDATA[难度简单123

输入一个英文句子，翻转句子中单词的顺序，但单词内字符的顺序不变。为简单起见，标点符号和普通字母一样处理。例如输入字符串"I am a student. "，则输出"student. a am I"。



示例 1：


输入: "the sky is blue"
输出:"blue is sky the"


示例 2：


输入: " hello world! "
输出:"world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格，但是反转后的字符不能包括...]]></description><category></category></item><item><title><![CDATA[剑指 Offer 46. 把数字翻译成字符串]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119643954</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119643954</guid><author>one_zero_one</author><pubDate>Thu, 12 Aug 2021 14:38:06 +0800</pubDate><description><![CDATA[难度中等261

给定一个数字，我们按照如下规则把它翻译为字符串：0 翻译成 “a” ，1 翻译成 “b”，……，11 翻译成 “l”，……，25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数，用来计算一个数字有多少种不同的翻译方法。



示例 1:


输入: 12258
输出: 5
解释: 12258有5种不同的翻译，分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"




class Solution:
    def translateNum(se..]]></description><category></category></item><item><title><![CDATA[剑指 Offer 45. 把数组排成最小的数]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119614334</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119614334</guid><author>one_zero_one</author><pubDate>Wed, 11 Aug 2021 18:50:43 +0800</pubDate><description><![CDATA[难度中等257

输入一个非负整数数组，把数组里所有数字拼接起来排成一个数，打印能拼接出的所有数字中最小的一个。



示例 1:


输入: [10,2]
输出: "102"

示例2:


输入: [3,30,34,5,9]
输出: "3033459"


x+y&gt;y+x ,x,y为str，则x》y
class Solution:
    def minNumber(self, nums: List[int]) -&gt; str:

        for i in range(len(n...]]></description><category></category></item><item><title><![CDATA[剑指 Offer 57 - II. 和为s的连续正数序列]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119602742</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119602742</guid><author>one_zero_one</author><pubDate>Wed, 11 Aug 2021 12:40:35 +0800</pubDate><description><![CDATA[难度简单302

输入一个正整数target，输出所有和为target的连续正整数序列（至少含有两个数）。

序列内的数字由小到大排列，不同序列按照首个数字从小到大排列。



示例 1：


输入：target = 9
输出：[[2,3,4],[4,5]]


示例 2：


输入：target = 15


class Solution:
    def findContinuousSequence(self, target: int) -&gt; List[List[int]]:
    ...]]></description><category></category></item><item><title><![CDATA[剑指 Offer 38. 字符串的排列]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119581742</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119581742</guid><author>one_zero_one</author><pubDate>Tue, 10 Aug 2021 23:19:43 +0800</pubDate><description><![CDATA[难度中等400

输入一个字符串，打印出该字符串中字符的所有排列。



你可以以任意顺序返回这个字符串数组，但里面不能有重复元素。



示例:


输入：s = "abc"
输出：["abc","acb","bac","bca","cab","cba"]


class Solution:
    def permutation(self, s: str) -&gt; List[str]:
        n=len(s)
        res=[]
        queue=list(s) #..]]></description><category></category></item><item><title><![CDATA[剑指 Offer 36. 二叉搜索树与双向链表]]></title><link>https://blog.youkuaiyun.com/one_zero_one/article/details/119580977</link><guid>https://blog.youkuaiyun.com/one_zero_one/article/details/119580977</guid><author>one_zero_one</author><pubDate>Tue, 10 Aug 2021 22:34:55 +0800</pubDate><description><![CDATA[难度中等283

输入一棵二叉搜索树，将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点，只能调整树中节点指针的指向。



为了让您更好地理解问题，以下面的二叉搜索树为例：







我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表，第一个节点的前驱是最后一个节点，最后一个节点的后继是第一个节点。

下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。







特别地，我们希望可以就地完成..]]></description><category></category></item></channel></rss>