自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(120)
  • 收藏
  • 关注

原创 122. 买卖股票的最佳时机 II

题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候

2020-11-08 11:53:53 228

原创 349. 两个数组的交集

题目给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]思路排序+双数组代码class Solution: def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]: ans = []

2020-11-02 14:48:42 842

原创 234. 回文链表

题目请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true思路先把链表中的节点值依次存放到数组中,在利用双指针法判断回文。代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { v

2020-10-23 20:28:16 220

原创 416. 分割等和子集

题目给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].思路这道题可以转化为,判断从是否可以从数组中选出一些数字,使得这些数字的和等于整个数组的元素和的一半,也就是经典的01背包问题,使用动态规划求解。定义二维数组dp[n][target-1]。dp[i][j]表示

2020-10-11 21:00:15 276

原创 75. 颜色分类

题目给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]代码class Solution: def sortColors(self, nums: List[int]) -> None: """

2020-10-07 13:33:50 118

原创 6. Z 字形变换

题目将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入: s = “L

2020-10-06 14:41:14 199

原创 18. 四数之和

题目给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[[-1, 0, 0, 1],[-2, -1, 1, 2],[-2, 0, 0, 2]]代码cl

2020-10-05 18:42:45 136

原创 15. 三数之和

题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]思路关键在于如何去重。排序+双指针。先锁定一个元素,在利用双指针从剩余元素中寻找符合条件的值。每一个元素都要去重。代码class

2020-10-02 15:31:01 140 1

原创 771. 宝石与石头

题目给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。输入: J = “aA”, S = “aAAbbbb”输出: 3代码方法一:暴力解法class Solution: def numJewelsInStones(self, J: str, S: str) -> int:

2020-10-02 14:46:11 103

原创 LCP 19. 秋叶收藏集

题目小扣出去秋游,途中收集了一些红叶和黄叶,他利用这些叶子初步整理了一份秋叶收藏集 leaves, 字符串 leaves 仅包含小写字符 r 和 y, 其中字符 r 表示一片红叶,字符 y 表示一片黄叶。出于美观整齐的考虑,小扣想要将收藏集中树叶的排列调整成「红、黄、红」三部分。每部分树叶数量可以不相等,但均需大于等于 1。每次调整操作,小扣可以将一片红叶替换成黄叶或者将一片黄叶替换成红叶。请问小扣最少需要多少次调整操作才能将秋叶收藏集调整完毕。示例 1:输入:leaves = “rrryyyrry

2020-10-01 09:54:26 147

原创 701. 二叉搜索树中的插入操作

题目给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。代码python版:# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None

2020-09-30 15:45:10 162

原创 538. 把二叉搜索树转换为累加树

题目给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。思路反中序遍历代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right =

2020-09-21 15:26:23 90

原创 46. 全排列

题目给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]代码class Solution: def permute(self, nums: List[int]) -> List[List[int]]: if not nums: return [] size = len(nums) fl

2020-09-18 16:33:51 95

原创 11. 盛最多水的容器

题目给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。示例:输入:[1,8,6,2,5,4,8,3,7]输出:49思路双指针代码import sysdef maxArea(height): if len(height) == 0 or l

2020-09-15 10:02:14 174

原创 94. 二叉树的中序遍历

题目给定一个二叉树,返回它的中序 遍历。用递归完成代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def inorderTraversal(self, root: TreeNode

2020-09-14 09:21:18 132

原创 5. 最长回文子串

题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”思路动态规划当字符串 s[i...j] 的长度为1,则它是回文串;当字符串s[i...j]的长度为2,且s[i]=s[j],则它是回文串,否则不是;当字符串s[i...j]的长度大于2,如果s[i]=s[j],并且s[i+1...j-1]是回文串,则它是回文串

2020-09-11 20:06:28 125

原创 Ubuntu20.04安装mysql8版本后修改密码

查看版本mysql --version修改配置文件sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf打开后,按“i”进入insert模式,添加语句 skip-grant-tables[mysqld]## * Basic Settings#user = mysql# pid-file = /var/run/mysqld/mysqld.pid# socket = /var/run/mysqld/mysql

2020-09-10 16:29:51 1876 3

原创 Python从命令行读入参数

import sysif __name__ == '__main__': n = int(sys.stdin.readline()) res1 = [] for i in range(2): line = sys.stdin.readline() value = list(map(int,line.split())) res1.append(value) m = int(sys.stdin.readline()) r

2020-09-10 14:49:52 667

原创 最长公共子串(求长度和寻找子串)

问题最长公共子串问题是寻找两个或多个已知字符串最长的子串。此问题与最长公共子序列问题的区别在于子序列不必是连续的,而子串却必须是。假设有两个字符串,找出其中最长的公共连续子串,输出其长度,并求出该最长公共子串。输入:abcdebcd输出:3bcd思路动态规划填表格代码def maxLengthStr(a,b): n = len(a) m = len(b) res = [[0 for _ in range(m)] for _ in range(n)]

2020-09-10 14:42:12 573

原创 39. 组合总和

题目给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]思路回溯法官方题解:代码class Solution: def c

2020-09-09 10:48:54 118

原创 2. 两数相加

题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路carry表示进位信息,carry的值只能是1或0。代码# Definition for singly-linke

2020-09-07 14:25:48 81

原创 107. 二叉树的层次遍历 II

题目给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7]思路参考 从上到下打印二叉树代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None#

2020-09-06 13:16:53 107

原创 LeetCode刷题——215. 数组中的第K个最大元素

题目在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。输入: [3,2,1,5,6,4] 和 k = 2输出: 5代码class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: h = [num for num in nums[:k]] heapq.heapify(h) for

2020-07-31 16:14:52 112

原创 347. 前 K 个高频元素

题目给定一个非空的整数数组,返回其中出现频率前 k 高的元素。输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]思路哈希表+堆哈希表保存数组中的每个值以及它的出现频率,Python中用字典实现。维护一个大小为K的最小堆。堆中每个节点保存一个键值对,按照(value,key)的方式保存,可以使得堆是按照value值排序。代码class Solution: def topKFrequent(self, nums: List[int], k: int) -

2020-07-31 16:12:01 108

原创 计算机网络学习实战篇——实现网络嗅探工具

实现功能在计算机里捕获IP协议报文、UDP协议报文、TCP协议报文,并分析报文里的关键信息。流程搭建服务基本框架基于操作系统的线程池实现。链接:操作系统学习实战篇——实现支持异步任务的线程池网卡的工作模式本文将网卡设置成混杂模式...

2020-07-30 22:16:07 344

原创 《剑指offer》刷题系列——(七十一)数组中的逆序对

题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [7,5,6,4]输出: 5思路暴力法是两个for循环遍历数组,比较数组中的每一对数字,但是会超时。如何减少比较次数?利用归并排序的思想。原数组: [7,5,6,4]一分为二:left = [7,5],right = [6,4]对每个子数组排序:left = [5,7],right = [4,6]归并的过程中寻找逆序对:left中的

2020-07-30 17:50:02 142

原创 归并排序python代码

def Merge(left, right): temp = [] i, j = 0, 0 while i < len(left) and j < len(right): if left[i] <= right[j]: temp.append(left[i]) i += 1 else: temp.append(right[j]) j +=

2020-07-30 14:37:55 610

原创 操作系统学习实战篇——实现支持异步任务的线程池

Python同步原语互斥锁在每一次对临界资源进行读或写操作时,先加锁,操作完成之后再解锁。Python互斥锁的使用:lock = threading.Lock() # 申请锁lock.acquire() # 加锁lock.release() # 解锁条件变量判断条件是否满足,一个线程在条件满足的时候执行;当条件不满足时睡眠,等待另一个线程满足条件将睡眠线程唤醒,使其继续执行下去。Python条件变量的使用:condition=threading.Condition() .

2020-07-27 19:56:02 162

原创 《剑指offer》刷题系列——(七十)字符串的排列

题目输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = “abc”输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]思路求整个字符串的排列,可以看成两步:第一步是求所有可能出现在第一个位置的字符,即把第一个字符与后面所有的字符交换;第二步是固定第一个字符,求后面所有字符的排列。(第二步中求后面字符的排列依然是使用这两步的方法,也就是递归实现。)c[x]表示当前固定位。代码clas

2020-07-27 12:04:34 121

转载 《剑指offer》刷题系列——(六十九)不用加减乘除做加法

题目写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。输入: a = 1, b = 1输出: 2思路使用位运算实现加法。设两数字的二进制形式 a,b ,其求和 s=a+b ,a(i)代表 a 的二进制第 i 位,则分为以下四种情况:观察发现,无进位和 与 异或运算 规律相同,进位 和 与运算 规律相同(并需左移一位)。因此,无进位和 nnn 与进位 ccc 的计算公式如下;代码class Solution: def add(self

2020-07-26 15:43:32 134

原创 《剑指offer》刷题系列——(六十八)把数组排成最小的数

题目输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: “102”示例 2:输入: [3,30,34,5,9]输出: “3033459”思路定义一个排序规则,数组根据这个规则排序之后能排成一个最小的数字。要确定排序规则,就要比较两个数字,也就是给出两个数字m和n,我们需要确定一个规则判断哪个应该排在前面。两个数字m和n可以拼接成mn和nm。如果mn<nm,那么我们应该打印mn,也就是m应该排在n前面,此

2020-07-26 14:25:22 231

原创 计算机网络学习——TCP/IP四层模型之应用层

应用层概述传输层以及以下的层提供完整的通信服务;而应用层是面向用户的一层。工作位置:终端设备UDP协议和TCP协议的应用场景:在多媒体信息应用方面,这一秒卡顿了没关系,因为下一秒也会有数据展示出来;这一秒丢失了,下一秒会有新的信息填充进来。因此可以使用UDP协议。在金融交易等可靠消息的传输过程中,不允许出现任何错误,因此使用TCP协议。应用层的功能:定义应用间通信的规则。如:应用进程的报文类型(请求报文、应答报文);报文的语法、格式;应用进程发送数据的时机、规则。DNS详解DNS

2020-07-25 23:08:05 1389

原创 计算机网络学习——TCP/IP四层模型之传输层

传输层传输层概述UDP协议UDP协议的概念:UDP协议的特点:TCP协议TCP协议的概念:TCP协议的特点:TCP协议的可靠传输可靠传输的基本原理TCP协议的可靠传输TCP协议的流量控制TCP协议的拥塞控制TCP连接的三次握手TCP连接的四次挥手TCP协议的四个定时器套接字与套接字编程传输层概述程序员一般是利用传输层的提供的接口进行网络编程。传输层属于用户部分的最底层,通信的最高层。传输层的作用:管理端到端的通信连接。传输层解决的问题是:通过虚拟的互连网络连接的两个终端设备如何进行通信。也就是进程

2020-07-25 16:32:43 271

原创 《剑指offer》刷题系列——(六十七)把数字翻译成字符串

题目给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”思路动态规划思想dp[i]表示s[0...i]字符串总共可以翻译的数量初始状态:dp[0] = 1d

2020-07-25 15:37:42 98

原创 《剑指offer》刷题系列——(六十六)把字符串转换成整数

题目写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。注意:假如该字符串中的第一

2020-07-25 11:27:16 140

原创 《剑指offer》刷题系列——(六十五)二叉搜索树的后序遍历序列

题目思路代码class Solution: def verifyPostorder(self, postorder: List[int]) -> bool: if not postorder: return True root = postorder[-1] left = 0 while left<len(postorder)-1: if postorder[left]>

2020-07-25 10:03:22 128

原创 《剑指offer》刷题系列——(六十四)二叉搜索树与双向链表

题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。思路要求转换之后的链表是排好序的,而根据二叉搜索树的特点,使用中序遍历,可以按照从小到大的顺序访问二叉树的每个节点。在二叉树中,每个节点都有两个指向子节点的指针。在双向链表中,每个几点也有两个指针,分别指向前一个节点和后一个节点。两者之间有相似之处,如果能将二叉搜索树中原本指向左子节点的指针调整为链表中指向前一个节点的指针,原本指向右子节点的指针调整为链表中指向后一个节点的指针,

2020-07-23 21:37:12 96

原创 《剑指offer》刷题系列——(六十三)扑克牌中的顺子

题目从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。示例 1:输入: [1,2,3,4,5]输出: True示例 2:输入: [0,0,1,2,5]输出: True思路大小王可以看成任意数字,我们就先把它们都看成0。判断五个数字是不是连续的,最直观的办法是把数组排序。由于0可以实任意数字,因此我们可以用0去补满数组中的空缺。如果排序之后的数组不是连续的,

2020-07-22 15:38:58 137

原创 《剑指offer》刷题系列——(六十二)n个骰子的点数

题目把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。输入: 2输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.08333,0.05556,0.02778]思路动态规划求解。当有n个骰子时,点数和的最小值为n,最大值为n * 6。创建一个n行6

2020-07-22 14:42:28 226

原创 《剑指offer》刷题系列——(六十一)丑数

题目我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。思路定义一个数组用来保存n个丑数,然后逐个填满数组。初始化:默认1为丑数,所以数组的第一个元素为1。开始填下一个数字:每个丑数都是由其前面的丑数乘以2、乘以3或者乘以5得到的,但是整个数组需要时排序的,所以每次添加一个新值都要保证它是当前可以加进

2020-07-21 12:49:48 84

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除