自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2.3.1归并排序

思路自底向上,层层合并,最后合并出最大的数组def guibing(li, start, end): if start == end: return mid = (start + end) // 2 guibing(li, start, mid) guibing(li, mid + 1, end) li1 = li[start:mid+1] + [10] li2 = li[mid +1:] + [10] i1 = 0 i2

2022-02-18 10:32:57 110

原创 2.2-2 选择排序

选择排序思路先从前n个数选出最小的,和li[0]交换,再从1 ~ n-1 中选出最小的和li[1]交换,直到结尾。代码li = [4,3,5,1,6,2]n = len(li)for i in range(n - 1): index = i tmp = li[index] for j in range(i + 1, n): if li[j] < tmp: tmp, index = li[j], j li[i], li[

2022-02-18 10:30:45 113

原创 2.1-4 考虑把两个n位2进制整数加起来的问题

题目描述考虑把两个n位2进制整数加起来的问题,这两个整数分别存储在两个n元数组A和B中,这两个整数的和应按二进制形式存储在一个(n+1)元数组C中。请给出该问题的形式化描述,并写出伪代码。形式化描述从第0位遍历到第n-1位,C的第i位为A与B第i位与进位相加对2取余,进位为A与B第i位与进位相加对2取整,由于A、B第n-1位为1,所以C的第n位为1代码a = []b = []n = len(a)c = [1] * (n + 1)jinwei = 0for i in range(n):

2022-02-17 16:40:56 446

原创 2.1-2重写插入排序,使之按非升序而不是非降序排序

li = [5, 2, 4, 6, 1, 3]n = len(li)for i in range(1, n): target = li[i] j = i - 1 while j >= 0 and li[j] < target: li[j], li[j+1] = li[j+1], li[j] j -= 1print(li)

2022-02-17 16:11:19 211

原创 2.1-1 说明插入排序在数组A=[31,41,59,26,41,58]上的执行过程

2.1-1 说明插入排序在数组A=[31,41,59,26,41,58]上的执行过程说明:加粗为有序,斜体为当前要插入的数,正常字体为待排序31,41,59,26,41,5831,41,59,26,41,5831,41,59,26,41,5826,31,41,59, 41,5826,31,41,41,59,5826,31,41,41,58,59...

2022-02-17 16:08:02 193

原创 2.1插入排序

插入排序思路:从后往前遍历,把新元素插在它该放在的地方,每次插之前,数组已经有序代码实现li = [5, 2, 4, 6, 1, 3]n = len(li)for i in range(1, n): target = li[i] j = i - 1 while j >= 0 and li[j] > target: li[j], li[j+1] = li[j+1], li[j] j -= 1print(li)...

2022-02-17 15:57:49 204

原创 寻找最大子串长度

寻找最大子串长度字符不连续思路:1.s1长度为m,s2长度为n,建立一个m*n的表board,当s1上字符s1[i]和s2上字符s2[j]相等,记board[i][j]为True否则为False2.根据1建好的表开始递归,起始位置为board[0][0]2.1查找每一行最左边的True,因为同一行左边的True的子串必然不小于右边的Ture2.2此时坐标为i,j那么就从i+2, j+2进行下一层递归,新的起始位置为board[i+2][j+2]代码s1 = '0102030405's2 =

2022-01-06 18:07:23 129

原创 leetcode学习:50. Pow(x, n)

50. Pow(x, n)题目描述实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。示例输入:x = 2.00000, n = 10输出:1024.00000思路来自leetcode官方思路代码class Solution: def myPow(self, x: float, n: int) -> float: def function(x, n): res = 1 x_now = x

2021-07-01 20:31:11 64

原创 leetcode学习:49. 字母异位词分组

49. 字母异位词分组题目描述给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]思路排序后的字符串是哈希表的key,然后用一个list放value即可代码class Solution: def groupAnagrams(self, strs: Lis

2021-07-01 19:59:09 59

原创 leetcode学习:48. 旋转图像

48. 旋转图像题目描述给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例思路数学规律 一层一层旋转代码class Solution: def rotate(self, matrix: List[List[int]]) -> None: """ Do not return anything, mod

2021-07-01 19:47:34 57

原创 leetcode学习:47. 全排列 II

47. 全排列 II题目描述给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。示例输入:nums = [1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]思路排序,bps,剪枝代码class Solution: def permuteUnique(self, nums: List[int]) -> List[List[int]]: class Node: def __init__(se

2021-07-01 17:33:39 132

原创 leetcode学习:46. 全排列

46. 全排列题目描述给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]思路bfs代码class Solution: def permute(self, nums: List[int]) -> List[List[int]]: class Node:

2021-07-01 16:32:04 195

原创 leetcode学习:45. 跳跃游戏 II

45. 跳跃游戏 II题目描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/jump-game-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小

2021-07-01 15:05:53 55

原创 leetcode学习:44. 通配符匹配

44. 通配符匹配题目描述给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。思路无非2种情况:1.非*

2021-07-01 10:34:50 77

原创 leetcode学习:43.字符串相乘

43. 字符串相乘题目描述给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例输入: num1 = “2”, num2 = “3”输出: “6”思路大数相乘,其实就是模拟乘法运算。先乘,最后进位。代码class Solution: def multiply(self, num1: str, num2: str) -> str: if num1 == '0' or num2 == '

2021-07-01 10:29:39 90

原创 leetcode学习:42.接雨水

42.接雨水题目描述给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。思路从左边出发 找到所有右端大于等于左端的水槽从右边出发 找到所有右端小于左端的水槽加起来就是 所有的水槽代码下面展示一些 内联代码片。

2021-06-25 18:42:03 72

原创 leetcode学习:41. 缺失的第一个正数

41. 缺失的第一个正数题目描述给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例输入:nums = [1,2,0]输出:3思路原地哈希3轮遍历,第一轮把负数都改成length+1第二轮遍历,如果数字num在1-length之间,就找到nums对应的下标把nums[num-1]改成负数第三轮遍历,返回 第一个正数的坐标+1,如果都是负数,那么返回length+1代码class Solu

2021-06-15 17:17:40 62

原创 leetcode学习:40. 组合总和 II

40. 组合总和 II题目描述给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[[1, 7],[1, 2, 5],[2, 6],[1, 1, 6]]思路排序

2021-06-15 10:59:19 76

原创 leetcode学习:39. 组合总和

39. 组合总和##题目描述给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例输入:candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]思路先给数组排序,想想成一棵树,根节点为空,第一层为数组的各个

2021-06-15 10:04:00 95

原创 leetcode学习:38外观数列

38.外观数列题目描述给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = “1”countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:111211211111221第一项是数字 1描述前一项,这个数是 1 即 “ 一 个 1 ”

2021-06-09 14:25:23 51

原创 leetcode学习:37.解数独

37.解数独题目描述编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 ‘.’ 表示。示例输入:board = [[“5”,“3”,".",".",“7”,".",".",".","."],[“6”,".",".",“1”,“9”,“5”,".",".","."],[".",“9”,

2021-06-07 09:15:38 85

原创 leetcode学习:36.有效的数独

36.有效的数独题目描述请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 ‘.’ 表示。注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。示例输入:board =[[“5”,“3”,".",".",

2021-06-04 17:19:45 64

原创 leetcode学习:35.搜索插入位置

35搜索插入位置题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例输入: [1,3,5,6], 5输出: 2思路二分查找的应用代码class Solution: def searchInsert(self, nums: List[int], target: int) -> int: def judge(index, nums, target):

2021-06-04 16:27:25 50

原创 leetcode学习:34.在排序数组中查找元素的第一个和最后一个位置

34.在排序数组中查找元素的第一个和最后一个位置题目描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?示例输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]思路其实还是一个二分查找,只不过对查找出来的位置进行往前往后的处理。代码class Sol

2021-06-04 15:34:21 60

原创 leetcode学习:33.搜索旋转排序数组

33.搜索旋转排序数组题目描述整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后

2021-06-04 15:04:26 116

原创 leetcode学习:32最长有效括号

32.最长有效括号题目描述给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例输入:s = “(()”输出:2解释:最长有效括号子串是 “()”思路判定s的每个字符的匹配属性,需要额外建一个栈代码// A code blockclass Solution: def longestValidParentheses(self, s: str) -> int: stack = [] s = list(s

2021-06-04 14:04:40 59

原创 leetcode学习:31.下一个排列

31.下一个排列题目描述实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。示例输入:nums = [1,2,3]输出:[1,3,2]思路从后往前2次扫描,第一次扫描找到倒数第一个小于后面的数的位置记为index1,第二次扫描找到index1+1到结尾最小的大于index1的数字。然后交换index1和index2的位置,给index1+1,

2021-06-03 20:40:57 40

原创 leetcode学习:30.串联所有单词的子串

30.串联所有单词的子串题目描述给定一个字符串 s 和一些 长度相同 的单词 words 。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符 ,但不需要考虑 words 中单词串联的顺序。示例输入:s = “barfoothefoobarman”, words = [“foo”,“bar”]输出:[0,9]解释:从索引 0 和 9 开始的子串分别是 “barfoo” 和 “foobar” 。输出的顺序不重

2021-06-02 18:58:04 57

原创 leetcode 学习:29两数相除

29.两数相除题目描述给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2示例输入: dividend = 10, divisor = 3输出: 3解释: 10/3 = truncate(3.33333…) = tr

2021-05-31 10:47:44 76

原创 leetcode学习:27.移除元素

27.移除元素题目描述给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函

2021-05-22 11:05:19 68

原创 leetcode学习 26.删除有序数组中的重复项

26.删除有序数组中的重复项题目描述给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。思路快慢双指针,当快指针的数字大于慢指针,把慢指

2021-05-17 20:22:16 44

原创 leetcode学习:25 K个一组翻转链表

25.K个一组反转链表题目描述给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。进阶:你可以设计一个只使用常数额外空间的算法来解决此问题吗?你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。示例思路先看剩下的节点够不够K,够K就进行反转,不够K就得到结果。算法1.设定哨兵指针,快慢指针,慢指针不动,快指针先走到index为k处(因为有哨兵节点,所

2021-05-17 20:07:58 44

原创 leetcode学习:24.两两交换链表中的节点

24.两两交换链表中的节点题目描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例输入:head = [1,2,3,4]输出:[2,1,4,3]思路快慢指针,哨兵节点算法1.哨兵节点,快慢指针指向头节点2.快指针比慢指针领先2步3.交换4.返回代码#Definition for singly-linked list.#class ListNode:# def __init__(self, val=

2021-05-10 21:07:21 47

原创 leetcode学习:23.合并k个升序链表

23.合并k个升序链表题目描述给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6思路取一个列表,把lists

2021-05-08 09:04:13 63

原创 leetcode练习:22.括号生成

22.括号生成题目描述数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]思路字符串开头必定是‘(’,只要已有的字符串中‘(’多于‘)’就可以增加‘)’否则 ,只能增加‘(’算法1.将‘(’作为开头,入栈2.判断能不能放‘)’如果可以,则入栈3.放‘(’,入栈4.返回代码class Node: def __init

2021-05-07 17:00:23 55

原创 leetcode学习:21.合并两个有序链表

21.合并两个有序链表题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]思路弄一个哨兵节点,然后l1和l2不断比较然后链入长链。算法1.新建哨兵节点2.当l1和l2都非空,把l1、l2较小值链入长链3.把不空的链整条链入长链代码# Definition for singly-linked list.# class ListNode:

2021-05-07 16:23:08 45

原创 leetcode学习:20.有效的括号

20.有效的括号题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例示例1输入:s = “()”输出:true示例2输入:s = “()[]{}”输出:true示例3输入:s = “(]”输出:false示例4输入:s = “([)]”输出:false示例5输入:s = “{[]}”输出:true思路弄一个栈,不停遍历S,如

2021-04-30 18:09:15 78 1

原创 leetcode学习:19.删除链表的倒数第N个结点

19.删除链表的倒数第N个结点题目描述给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]思路删除倒数第n个结点,则对倒数第n-1个结点进行操作,使用双指针的方法找,为了方便返回头节点,另外再建一个哨兵结点。算法1.建立哨兵结点,并且快指针和慢指针都指向哨兵结点,另外设立一个快结点的计数器2.快结点走,计数器+1,如果计数器大于n则慢结点也走3.判断快

2021-04-29 20:57:29 70

原创 leetcode学习:18.四数之和

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

2021-04-29 20:13:41 52

原创 leetcode学习:17.电话号码的字母组合

17.电话号码的字母组合题目描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例示例1输入:digits = “23”输出:[

2021-04-29 19:51:19 58

空空如也

空空如也

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

TA关注的人

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