- 博客(30)
- 收藏
- 关注
原创 课程表二
#题目内容现在你总共有 n 门课需要选,记为0到n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:【0,1】给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。#解题思路其实和上篇课程表的blog相差不大,只是需要一个数组将出队列的课程储存即可,最后判断numcourse是否等于0,返回该数组或者【】from coll
2020-05-12 13:18:35 162
原创 课程表
#题目内容你这个学期必须选修numcourse门课程,记为0到numcourse-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:【0,1】给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?#解题思路拓扑序列创建一个记录入度的数组,一个记录入度为0的队列,一个邻接表记录某个课程的后修课程。广度遍历:通过将入度为0的队列中元素删去,numcourse就减一,在其邻接表的后修课程入度减一,当存在入度为0的课程则
2020-05-12 13:10:15 416
原创 二叉树的最近公共祖先
#题目内容给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)例如,给定如下二叉树: root =【3,5,1,6,2,0,8,null,null,7,4】#解题思路先深度遍历左子树,再遍历右子树,回溯时...
2020-05-05 19:03:52 185
原创 二叉树的最大深度
#题目内容给定一个二叉树,求出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。#解题思路直接用递归方法遍历二叉树class Solution: def maxDepth(self, root: TreeNode) -> int: if root != None: return ma...
2020-05-05 18:36:45 112
原创 相同的树
#题目内容给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。#解题思路采用递归判断其左子树和右子树是否相等class Solution: def isSameTree(self, p: TreeNode, q: TreeNode) -> bool: if p == Non...
2020-04-21 11:46:45 104
原创 对称二叉树
#题目内容给定一个二叉树,检查它是否是镜像对称的。例如,二叉树【1,2,2,3,4,4,3】是对称的。但是下面这个【1,2,2,null,3,null,3】则不是对称的。#解题思路这个可以转换成两个相同的树判别,只是判断左子树和右子树相同class Solution: def isSymmetric(self, root: TreeNode) -> bool: ...
2020-04-21 11:40:19 103
原创 格雷编码
#题目内容格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。class Solution: def grayCode(self, n: int) -> List[int]: res,head = [0],1 for i ...
2020-04-18 20:45:24 130
原创 子集
#题目内容给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: self.res = [] self.back([],0,nums) ...
2020-04-18 19:54:55 115
原创 只出现一次的数字
#题目内容给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?#解题思路用亦或来解决此题亦或:按二进制,同位数处两个相等取0,不相等取1class Solution: def singleNumber(self, nums: List[int]) -> ...
2020-04-10 09:19:12 90
原创 无重复字符的最长子串
#题目内容给定一个字符串,请你找出其中不含有重复字符的最长子串的长度#解题思路动态规划法,先算出最小字符串切片的最长子串,再求出更长字符串的最小子串。class Solution: def lengthOfLongestSubstring(self, s: str) -> int: if s=="": r...
2020-04-10 09:09:08 85
原创 最大公共前缀
#题目内容编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串"".#解题思路用zip(*)内置函数将每个字符串的相同位置元素取出来再用set内置函数去除相同字母,则长度为1的部分就是公共前缀class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: ...
2020-03-31 12:01:29 126
原创 反转字符串
#题目内容编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组char[]的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组,使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。class Solution: def reverseString(self, s: List[str]) -> ...
2020-03-31 11:55:31 120
原创 滑动窗口的最大值
#题目内容给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?class Solution: def maxSlidingWindow(self, nums: List[int], k: int) -> L...
2020-03-27 22:18:38 87
原创 设计循环双端队列
#题目内容设计实现双端队列。你的实现需要支持以下操作:MyCircularDeque(k):构造函数,双端队列的大小为k。insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 true。del...
2020-03-27 22:15:38 116
原创 整数反转
#题目内容给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。class Solution: def reverse(self, x: int) -> int: y,res = ab...
2020-03-27 21:49:25 74
原创 逆波兰表达式求值
#题目内容根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。#解题思路创建一个辅助栈将其符号左边的数字存入当遍历到符号时进行符号左边两个元素的运算class Solution: ...
2020-03-19 11:55:30 88
原创 最小栈
#题目内容设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) -- 将元素 x 推入栈中。pop() -- 删除栈顶的元素。top() -- 获取栈顶元素。getMin() -- 检索栈中的最小元素。#解题思路创建一个辅助栈该辅助栈与其同步添加删除元素先添加第一个元素,之后当元素比其小才添加否则继续添加这个数以获得栈中的最小元素c...
2020-03-19 11:48:59 94
原创 有效的括号
#题目内容给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。#解题思路创建一个辅助栈利用字典通过遍历s从左开始添加左括号到辅助栈判断第一个右括号与与其左边相邻的左括号是否匹配lass Solution: de...
2020-03-19 11:38:10 89
原创 环形链表
#题目内容给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos是-1,则在该链表中没有环。class Solution: def hasCycle(self, head: ListNode) -> bool: if head==None: ...
2020-03-13 22:15:21 124
原创 删除排序链表中的重复元素
#题目内容给定一个排序链表,删除所有重复的元素,使得每个元素只能出现一次。#解题思路快慢指针法lass Solution: def deleteDuplicates(self, head: ListNode) -> ListNode: if not (head and head.next): return he...
2020-03-11 21:14:16 71
原创 合并两个有序链表
#题目内容将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有结点组成的。class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: prehead=ListNode(-1) p...
2020-03-11 21:10:12 126
原创 城市链表
#题目内容将若干城市的信息,存入一个带头结点的单链表。结点中的城市信息包括:城市名,城市的位置坐标。要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。本人参考百度文库数据结构实验报告#include<stdio.h>#include<malloc.h>#include<math.h>#include<stdlib.h...
2020-03-08 15:31:20 4008 2
原创 猜数
#题目内容电脑产生一个0到100之间的随机数字,并且要求用户来猜,如果用户猜的数字比这个数字大,电脑会提示“太大”,否则提示“太小”,当用户正好猜中,电脑会提示“恭喜你猜对了,这个数是…”。在拥护每次猜测之后,程序会输出是用户第几次猜测,如果用户输入的根本不是一个数字,程序会告诉用户输入无效。import randomn=random.randint(1,100)i=1j=0while...
2020-03-08 11:30:42 509 1
原创 买卖股票的最佳时机2
#题目内容给定一个数组,它的第i个元素是一支给定股票第i天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)注意:你不能同时参与多笔交易(你必须在再次购买前出售之前的股票)。#解题思路只要股票上涨,就不卖出,可以理解为从买入股票第一条开始上涨,直到下跌前一天卖出,并且下跌期间不买入股票class Solution: def ma...
2020-03-08 11:17:58 73
原创 买卖股票的最佳时机
#题目内容给定一个数组,他的第i个元素是一支给定股票第i天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获得的最大利润。注意你不能在买入股票前卖出股票。#解题思路双指针法:定义min_p和max_p来记录遍历该数组时的当前最小价格和当前最大利润。class Solution: def maxProfit(self, prices: L...
2020-02-29 13:49:23 59
原创 合并两个有序数组
#题目内容给定两个有序数组nums1和nums2,将nums2合并到nums1中,使得num1成为一个有序数组。说明:*初始化nums1和nums2的元素数量分别为m和n。*你可以假设nums1有足够的空间(空间大小大于或等于m+n)来保存nums2中的元素。#解题思路用双指针法/从后往前两个有序数组比较大小并赋值到num1。class Solution: def merge...
2020-02-29 13:29:39 86
原创 最大子序和
#题目内容给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。#解题思路定义两个变量 cur_sum和max_sum来记录当前元素的最大和和迄今为止的最大和遍历数组并在每个步骤更新。class Solution: def maxSubArray(self, nums: List[int]) -> int: ...
2020-02-29 13:19:45 73
原创 移除元素
1.题目内容给定一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,返回移除后的数组的新长度。不需要使用额外的数组空间,你必须在原地修改输入数组并在1使用o(1)额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。2.解题思路用while循环结构,遍历数组nums,判断并删除数值等于val的元素class Solution: d...
2020-02-23 13:23:17 76
原创 删除排序数组中的重复项
1.题目内容给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并使用o(1)额外空间的条件下完成。2.解题思路利用指针,遍历该排序数组所有元素,用指针记录不相等的元素,并记录下长度class Solution: def removeDuplicates(self, nums: Li...
2020-02-23 13:15:14 58
原创 两数之和
1.题目内容给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。2.解题思路利用python中的字典,将键作为索引,遍历寻找和为目标值的两个整数class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: dic...
2020-02-23 13:06:04 91
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人