这里是链表的插入排序。时间效率和空间效率十分堪忧,但是思想比较简单。
1 | # Definition for singly-linked list. |
用一张图来说明归并排序:
1 | # Definition for singly-linked list. |
自己代码的开源仓库:click here 欢迎Star和Fork :)
已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,4,4,5,6,7] 在变化后可能得到:
给你一个可能存在 重复 元素值的数组 nums ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素 。
1 |
|
1 | class Solution(object): |
自己代码的开源仓库:click here 欢迎Star和Fork :)
已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:
若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]
若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]
注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …, a[n-2]] 。
给你一个元素值 互不相同 的数组 nums ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素 。
1 | 示例 1: |
没意义.
1 | class Solution(object): |
1 | class Solution(object): |
自己代码的开源仓库:click here 欢迎Star和Fork :)
给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
1 | 示例 1: |
1 | class Solution(object): |
自己代码的开源仓库:click here 欢迎Star和Fork :)
给你一个字符串 s ,逐个翻转字符串中的所有 单词 。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。
说明:
1 |
|
1 | class Solution(object): |
首先介绍一下中缀表达式,中缀表达式是人类最熟悉的表达式,比如1+2, (1+2)*3等。
如下图:
中缀表达式就是对上述二叉树进行中序遍历得到的结果。
波兰式又称为前缀表达式,它是对上述语法二叉树进行前序遍历得到的结果。上图的前缀表达式为:-+A*B-CD*EF
逆波兰式又称为后缀表达式,是上述语法二叉树的后序遍历得到的结果。
]]>自己代码的开源仓库:click here 欢迎Star和Fork :)
根据 逆波兰表示法,求表达式的值。
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
1 | 示例 1: |
可以说只要想到用栈和理解逆波兰式的含义就十分简单了。唯一一点就是要注意只取整数部分,不考虑小数部分。
1 | import math |
自己代码的开源仓库:click here 欢迎Star和Fork :)
给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。
1 | 示例 1: |
1 | 示例 2: |
1 | from fractions import Fraction |
自己代码的开源仓库:click here 欢迎Star和Fork :)
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。
进阶:
你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?
1 | 示例 1: |
1 | 输入:head = [-1,5,3,4,0] |
用一张图来说明归并排序:
1 | # Definition for singly-linked list. |
自己代码的开源仓库:click here 欢迎Star和Fork :)
对链表进行插入排序。
插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。
每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。
插入排序算法:
插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
重复直到所有输入数据插入完为止。
1 | 示例 1: |
用一张原理图来说明。
1 | # Definition for singly-linked list. |
回家休息几天,搬宿舍心累。再回实验室就开始好好科研了!!!
自己代码的开源仓库:click here 欢迎Star和Fork :)
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。
实现 LRUCache 类:
LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存
int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。
void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。
进阶:你是否可以在 O(1) 时间复杂度内完成这两种操作?
1 | 示例: |
LRU:最近最少使用缓存机制
其设计的原则依据:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。
假定系统为某进程分配了3个物理块,进程运行时的页面走向为 7 0 1 2 0 3 0 4,开始时3个物理块均为空,那么LRU算法是如下工作的:
效率和内存差了点,但是自己纯手工写的。QAQ
核心思想就是通过使用双向链表和字典来存储内容。
1 | class LRUCache(object): |
LRU:最近最少使用缓存机制
其设计的原则依据:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。
假定系统为某进程分配了3个物理块,进程运行时的页面走向为 7 0 1 2 0 3 0 4,开始时3个物理块均为空,那么LRU算法是如下工作的:
上述操纵通过一个双向链表就可以轻松实现了。
只需要每次将不论是否出现在链表中的值都置于链表的头就可以了,如果链表满了,就将链表的元素移除链表。
回家休息几天,搬宿舍心累。再回实验室就开始好好科研了!!!
自己代码的开源仓库:click here 欢迎Star和Fork :)
v给定一个二叉树,返回它的 后序 遍历。
1 | 示例: |
1 | # Definition for a binary tree node. |
最近刚从雁栖湖搬到中关村。各方面和自己的预期很有差异。可能是还是没有适应。
自己代码的开源仓库:click here 欢迎Star和Fork :)
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
1 | 示例 1: |
1 | 示例 4: |
1 | 示例 5: |
即将回家!
自己代码的开源仓库:click here 欢迎Star和Fork :)
给定一个单链表 L:L0→L1→…→Ln-1→Ln ,
将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
1 | 示例 1: |
1 | import copy |
自行去官网下载安装VsCode就可以,下载地址
这里我建议还是安装Latex吧,如果你的电脑空间不够了可以尝试安装Basic Tex,关于Basic Tex的相关内容我在之前的博文中讲过了(ps:其实他还是存在一些问题的,因此建议安装的是MacTex)。下面是安装MacTex的话可以通过如下命令进行安装:
1 | brew cask install basictex |
在VsCode中安装latex workshop插件,如下图:
进入用户设置:
打开扩展->Json中的用户设置:
将下述内容添加到{}中即可:
1 |
|
完成上述步骤之后重启VsCode即可。
至于中文的设置可以通过引用
1 | \documentclass[UTF8]{ctexart} |
来实现.
]]>即将回家!
自己代码的开源仓库:click here 欢迎Star和Fork :)
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。
说明:不允许修改给定的链表。
进阶:
你是否可以使用 O(1) 空间解决此题?
1 | 示例 1: |
1 | 示例 2: |
1 | 示例 3: |
1 | # Definition for singly-linked list. |
创建新的环境的命令如下:
1 | conda env create -f environment.yml |
其中.yml是需要自己的配置的。
配置格式如下:
1 | name: 虚拟环境名 |
例子:
1 | name: Total3D |
这几天课比较多,有点忙,可能来不及更新喔
自己代码的开源仓库:click here 欢迎Star和Fork :)
给定一个链表,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
如果链表中存在环,则返回 true 。 否则,返回 false 。
进阶:
你能用 O(1)(即,常量)内存解决此问题吗?
1 | 示例 1: |
1 | 示例 2: |
1 | 示例 3: |
1 | # Definition for singly-linked list. |