Leetcode练习
作业
上官峰晨
研究生计算机技术专业在读,坐标北京,日常文章笔记系个人所学心得,共同成长!
展开
-
Leetcode - 格雷编码
public class Solution {public IList<int> GrayCode(int n){ IList<int> list = new List<int> { 0 }; int len; for (int i = 0; i < n; i++) { len = list.Coun...原创 2020-04-20 18:23:54 · 117 阅读 · 0 评论 -
Leetcode - 子集
解题思路:(python3)递归。class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: output=[[]] for num in nums: output+=[curr+[num]for curr in output] ...原创 2020-04-20 11:37:26 · 116 阅读 · 0 评论 -
Leetcode - 只出现一次的数字
class Solution: def singleNumber(self, nums: List[int]) -> int: lst=[] for i in nums: if i not in lst: lst.append(i) else: ...原创 2020-04-12 13:02:32 · 68 阅读 · 0 评论 -
Leetcode - 反转字符串
解题思路:注意限定i的循环遍历上限为数组的一半,否则会经历二次反转导致无变化。public class Solution { public void ReverseString(char[] s) { int n=s.Length; for(int i=0;i<(n/2);i++) { char temp=s...原创 2020-03-31 20:25:56 · 105 阅读 · 0 评论 -
Leetcode - 滑动窗口最大值
class Solution: def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]: n=len(nums) lst=[] if n==0 or k==0: return [] for i in range(n-k+1...原创 2020-03-30 21:13:02 · 96 阅读 · 0 评论 -
Leetcode - 设计循环双端队列
public class MyCircularDeque { public int[] dataset; public int pfront; public int prear; public int maxsize; /** Initialize your data structure here. Set the size of the deque t...原创 2020-03-30 20:40:45 · 87 阅读 · 0 评论 -
Leetcode -通配符匹配
public class Solution { public bool IsMatch(string s, string p) { int i = 0; int j = 0; int iStar = -1; int jStar = -1; int m = s.Length; int n = p...原创 2020-03-30 18:39:05 · 123 阅读 · 0 评论 -
Leetcode - 加油站
解题思路:(C#)通过遍历循环每一个位置为出发点,对于单个循环每次只要满足“剩余油量+加油量>=下一个路程”即为满足条件的出发点,否则就不满足,跳出循环,进行下一个位置的出发点的判断。public class Solution { public int CanCompleteCircuit(int[] gas, int[] cost) { int len=cos...原创 2020-03-30 00:25:40 · 150 阅读 · 0 评论 -
Leetcode - 跳跃游戏
解题思路:(C#)若一个数组全为非零元素,则一定可以到达最后一个位置,因为每次跳跃的长度不超过所在元素大小,故只需要反向考虑遇到零的情况。public class Solution { //创建一个用来判断一段带有零的、元素个数至少为2的数组能否越过零这个位置 public bool Zero(int n,int[] nums) { for(int ...原创 2020-03-29 21:38:44 · 144 阅读 · 0 评论 -
Leetcode - 分发饼干
class Solution: def findContentChildren(self, g: List[int], s: List[int]) -> int: g.sort() s.sort() count = 0 p1 = 0 p2 = 0 #将两个指针从左向右遍历列表 ...原创 2020-03-27 17:50:48 · 107 阅读 · 0 评论 -
Leetcode - 判断子序列
public class Solution { public bool IsSubsequence(String s, String t) { int currentIndex = 0; for (int i = 0; i < s.Length; i++) { b...原创 2020-03-26 23:41:10 · 144 阅读 · 0 评论 -
Leetcode - 恢复二叉搜索树
/** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNode left; * public TreeNode right; * public TreeNode(int x) { val = x; } * }...原创 2020-03-24 23:21:02 · 91 阅读 · 0 评论 -
Leetocde - 不同的二叉搜索树 II
/** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNode left; * public TreeNode right; * public TreeNode(int x) { val = x; } * }...原创 2020-03-23 22:11:50 · 90 阅读 · 0 评论 -
Leetcode - 二叉树的中序遍历
public class Solution { public IList<int> InorderTraversal(TreeNode root) { IList<int> result = new List<int>(); Stack Steps = new Stack(); //栈 ...原创 2020-03-22 11:12:19 · 77 阅读 · 0 评论 -
Leetcode - 逆波兰表达式求值
解题思路:(C#)通过一个栈实现,整体用一个while循环遍历整个字符串,当遇到不能把字符转换成整型时进行判断,同时将栈顶两个元素出栈进行相关运算,运算结果放入栈中继续进行遍历。public class Solution { public int EvalRPN(string[] tokens) { Stack<int> s = new Stack<...原创 2020-03-22 11:08:14 · 242 阅读 · 0 评论 -
Leetcode - 最小栈
解题思路:(C#)直接调用Stack相关方法。public class MinStack {private Stack<int> myStack; /** initialize your data structure here. */ public MinStack() {myStack = new Stack<int>(); } ...原创 2020-03-22 09:48:09 · 88 阅读 · 0 评论 -
Leetcode - 二叉树的最大深度
解题思路:(C#)逐层将所有节点放入队列中:当前层所有节点出列,然后推入下一层所有不为null的节点,直到队列为空。/** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNode left; * public Tree...原创 2020-03-21 21:27:27 · 86 阅读 · 0 评论 -
Leetcode - 对称二叉树
/** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNode left; * public TreeNode right; * public TreeNode(int x) { val = x; } * }...原创 2020-03-20 21:15:17 · 89 阅读 · 0 评论 -
Leetcode - 相同的树
解题思路:(C#)通过递归,前序遍历对比判断是否为相同的树。/** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNode left; * public TreeNode right; * public Tr...原创 2020-03-19 20:15:27 · 75 阅读 · 0 评论 -
Leetcode - 正则表达式匹配
解题思路:(Cpp)递归的思想。class Solution {public: bool isMatch(string s, string p) { if (p.empty()) return s.empty(); if (p[1] == '*') { return (isMatch(s, p.substr(2)) || (!...原创 2020-03-18 16:35:22 · 86 阅读 · 0 评论 -
Leetcode - 最长回文子串
解题思路:(C#)该思路时间复杂度有点太高了,因为使用了两个for循环,但这是能想到的第一个方法。通过构建两个函数,一个用来判断是否为回文字符串,另一个通过循环记录最长的子串以及其长度,并判断是否为最长回文子串,最后返回。public class Solution { public string LongestPalindrome(string s) { ...原创 2020-03-17 15:13:41 · 68 阅读 · 0 评论 -
Leetcode - 无重复字符的最长子串
解题思路:(C#)通过把字符串变成数组的形式,用临时变量来存储最大字符串,循环数组,对比临时变量中是否存在数组元素,如果存在,代表重复了,那么就需要删除temp中的重复元素,最后选择最大的不重复字符串。public class Solution { public int LengthOfLongestSubstring(string str) { if (str==n...原创 2020-03-16 17:55:34 · 167 阅读 · 0 评论 -
Leetcode - 有效的括号
解题思路:(C#)利用栈先进后出的原则,先将满足括号左半部分的都加到栈内,当遇到右半部分的时候进行判断,若和栈顶元素是“一对”则删除栈顶元素,若不同则将右半部分加到栈内;此处利用到的是括号的对称性,不管相对“对称点”在哪里或者能凑成对的两个部分距离多远,只要遇到能“配成一对”的就消除,不能的话就加进去,最后站内元素不为空的时候说明字符串无效。public class Solution { ...原创 2020-03-15 18:01:32 · 80 阅读 · 0 评论 -
Leetcode - 最长公共前缀
解题思路:(C#)首先判断数组是否为空。通过遍历数组中每一个元素,与第一个元素的每一个字符作比较,将公共部分记录下来,同时要保证公共部分长度不能超过数组任何一个元素的字符长度,最后实现返回最长公共前缀。public class Solution { public string LongestCommonPrefix(string[] strs) { //判...原创 2020-03-14 16:51:39 · 102 阅读 · 0 评论 -
Leetcode - 罗马数字转整数
解题思路:(C#)将所有可能出现的罗马数字组合列出来用其他字符代替,找出所有可能的情况以后,用switch语句进行对数组s中所有字符的遍历操作,将所有遇到的情况对应的数值相加即可。public class Solution { public int RomanToInt(string s) { s=s.Replace("IV","Y"); s=s.Re...原创 2020-03-13 17:35:04 · 131 阅读 · 0 评论 -
Leetcode - 合并K个排序链表
解题思路:(C#)用分治法把大问题划成小块,同时使用递归求解思想解决问题。新建两个函数,一个用来递归拆分链表,直至拆分成两个之间的比较;另一个利用合并两个有序链表的思想将两个合并,最后将所有拆分的链表回归为一个完整的链表完成递归。/** * Definition for singly-linked list. * public class ListNode { * public...原创 2020-03-12 11:52:34 · 76 阅读 · 0 评论 -
Leetcode - 删除链表的倒数第N个节点
解题思路:先循环遍历找到长度,再循环遍历删除。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution ...原创 2020-03-11 22:25:56 · 81 阅读 · 0 评论 -
Leetcode - 两数相加
解题思路:(Cpp)直接上代码。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {publi...原创 2020-03-10 21:55:35 · 86 阅读 · 0 评论 -
Leetcode - 环形链表
解题思路:(Cpp)假如该链表是循环链表,定义两个指针,一个每次向前移动两个节点,另一个向前移动一个节点。这就和田径比赛一样,假如这两个运动员跑的是直道,快的运动员和慢的运动员在起点位于同一位置,但快的运动员必将先到达终点,期间这两个运动员不会相遇。而如果绕圈跑,跑的快的运动员在超过跑的慢的运动员一圈的时候,他们将会相遇,此刻就是循环链表。/** * Definition for sing...原创 2020-03-09 18:43:12 · 105 阅读 · 0 评论 -
Leetcode - 删除排序链表中的重复元素
解题思路:(Cpp)遍历链表,分别比较当前节点和下一个节点val是否相等。相等的话删除下一个节点,当前节点不变;不相等的话不删除下一个节点,下一个节点变为当前节点。直到碰到当前节点的next成员为NULL时跳出循环,返回链表。/** * Definition for singly-linked list. * struct ListNode { * int val; * ...原创 2020-03-08 22:03:54 · 88 阅读 · 0 评论 -
Leetcode - 合并两个有序链表
解题思路:(python3)设置两个指针遍历两个链表,同时遍历并比较大小,如果1链表的当前节点值较小,将该节点添加到新链表中,1链表遍历指针后移一位,直到两个链表内所有节点都添加到新链表中。注意:题目要求新链表是通过拼接给定的两个链表的所有节点组成的,所以初始新建一个头节点,将头节点下一个节点指针指向两个链表中的最小节点,最后返回头节点的下一个节点。# Definition for sing...原创 2020-03-07 18:20:14 · 211 阅读 · 0 评论 -
Leetcode - 买卖股票的最佳时机 III
解题思路:(python)其实也不算是严格的二分法,就是分两次遍历。第一次遍历是从头至尾遍历,记录每个区间内一次股票交易获得最大利润,并保存至一个数组内,方便第二轮遍历取值,此处就是可以节省时间了。第二次遍历就是从尾向头遍历,选出相应坐标右边区间内一次交易的最大值,左边区间交易的最大值就可以直接从第一次遍历得到的数组获取,两者相加,即可得到两次交易的最大值。class Solution(ob...原创 2020-03-06 23:08:48 · 86 阅读 · 0 评论 -
Leetcode - 最接近的三数之和
解题思路:(python3)由于小白能力有限,首先想到的还是暴力解题法……在排序的数组中进行遍历寻找、作比较,排除重复元素所浪费的执行时间(因为是双指针形式,所以相邻的大小相等的元素在同一指针下即视为“重复”)。值得注意的是,在第一次作比较的时候,mindiff与diff为了得到diff,在初始化mindiff的时候特意赋值为无穷大。class Solution: def three...原创 2020-03-05 21:55:20 · 79 阅读 · 0 评论 -
Leetcode - 买卖股票的最佳时机 II
解题思路:(python3)假设股票价格形成的数组为[p1,p2,…,pn],第1天价格最低买入,之后连续增长,第m天价格最高卖出,则利润为pm - p1 = (p2 - p1) + (p3 - p4) + … + (pm + pm -1),可以差成相邻上涨价格的差值。因此,可以通过多次买卖股票,上涨的时候就进行买卖,下降的时候就略过,该过程可以用if淘汰掉下降的差值(负值),积累上涨的差值,...原创 2020-03-04 20:08:38 · 61 阅读 · 0 评论 -
Leetcode - 三数之和
解题思路:(python3)类似于两数之和,使用暴力法,首先先对数组排序,注意此时应考虑数组元素小于3、数组为空以及遇到重复元素跳过循环的情况。该方法虽然内存消耗很小,但是执行用时却很大,不是一种理想的方法。class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: res=[]...原创 2020-03-04 16:49:51 · 73 阅读 · 0 评论 -
额外作业 - 猜数字
解题思路:(python3)在python中引入random文件生成随机数,通过try except语句实现报错功能,同时通过while循环实现判断输入数字和随机数的大小比较,从而反馈给用户。import randomnum = random.randint(1,100)print('下面开始猜数字游戏:')try: temp=input('请输入我心里正在想1—100之间的...原创 2020-03-03 11:23:35 · 167 阅读 · 0 评论 -
Leetcode - 回文数
解题思路:(python3)类似于整数反转一题,但是做法和整数反转稍有不同,通过两个变量将整数进行反转,该题更为简洁。class Solution: def isPalindrome(self, x: int) -> bool: y=0 x1=x if x<0: return 0==1 ...原创 2020-03-01 11:49:01 · 75 阅读 · 0 评论 -
Leetcode - 买卖股票的最佳时机
解题思路:(python3)该题类似于寻找最大子序和。同样的,若采用暴力法一一遍历或者记录都将超出时间限制或者内存限制。但是股票的最大利润是排在相对后方的较大元素与排在相对前方的较小元素之差,故想到可以通过先寻找并记录最小元素,然后再利用做差比较找到最大差值,此时不用担心最大元素排在最小元素之前,若排在最小元素之前则利润为负值,返回0。class Solution: def maxP...原创 2020-02-27 16:44:17 · 116 阅读 · 0 评论 -
Leetcode - 合并两个有序数组
解题思路:由于nums1中有0占位,故想到使用nums2中元素替代0,使用迭代法即可。class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: j=0 for i in range(m,len(nums1)): ...原创 2020-02-27 15:36:51 · 126 阅读 · 1 评论 -
Leetcode - 最大子序和
解题思路:(python3)该题难度应该不是简单吧。首先想到的是遍历暴力法,相加后再用max()找最大和,但是由于使用了一个for、两个while循环,无论是用列表记录还是变量记录,都会造成超出时间限制和内存限制,故不可行,所以想到边相加边比较。当当前和小于下一个元素时已经说明子序中有过小元素牵制,该子序和不可取,从而从下一个元素继续开始。在这个过程中随时记录最大值。class Soluti...原创 2020-02-25 16:35:16 · 92 阅读 · 0 评论