- 博客(28)
- 收藏
- 关注
原创 课程表II
题目:现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。思路:先用字典储存每个课程的前继课程,找到所有出度为零的课程,即可以直接的学习的课程。然后从这些课程开始,删减每个课程的出度,直到得出结果或找到环。
2020-05-19 11:18:30 388
原创 207.课程表
题目:你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?思路:先用字典储存每个课程的前继课程,找到所有出度为零的课程,即可以直接的学习的课程。然后从这些课程开始,删减每个课程的出度,直到得出结果或找到环。 public bool CanFinish
2020-05-19 10:49:20 100
原创 236.二叉树的最近公共祖先
题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4] if(root == nul...
2020-05-07 15:54:51 83
原创 104 二叉树的最大深度
题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。public class Solution { public int MaxDepth(TreeNode root) {if(root==null)return 0;else{ int left=MaxDepth(root.left); int right=MaxDe...
2020-05-07 14:29:15 77
原创 101.对称二叉树
题目:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ 2 2/ \ / 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ 2 2\ 3 3 public bool IsSymmetric(TreeNode root) { r...
2020-04-28 08:06:04 72
原创 100.相同的树
题目:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。思路:两个树同时开始遍历,当同时为null时相同,当所有当前节点值一样时相同,否则不同。 if (p == null && q == null) { return true;...
2020-04-27 21:43:19 67
原创 子集
题目:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]public class Solution { public IList<IList<int>&g...
2020-04-20 19:31:59 79
原创 无重复字符的最长子串
题目:3. 无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。思路:用哈希集来判断是否有重复字符。每一次出现重复字符,截取从头开始到重复之前的子串,放入储存数组中后,在原字符串中删除所截子串。最后比较数组中各子串的长度。public class Solution { public int LengthOfLongestSubstring(st...
2020-04-13 07:54:22 69
原创 只出现一次的数字
题目:136. 只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?思路:由于数组元素必为奇数,故可以先将数组整理成由小到大的排列。再以2为格依次分割比较。如果格内两元素相等,则比较下一格,当下一格内元素个数为一个时,直接返回当前元素;如果格内元素不...
2020-04-13 07:44:40 58
原创 反转字符串
题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。public class Solution { public void ReverseString(char[] s) {...
2020-04-06 18:53:11 74
原创 最长公共前缀
题目:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”题解:对每一个字符串,从头开始依次对比判断,直到最短的字符串长度。 string temp=""; if(strs.Length==0) return temp; int i = ...
2020-04-06 18:48:02 83
原创 滑动窗体最大值
题目:给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。思路:先确定滑动窗口在最初位置的最大值。滑动窗口移动一次只新增一个数,故只要将新增的数和移动前的滑动窗口内的最大值比较即可。若大于,则新增的数位新的最大值,若小于,重新判断最大值即可。public clas...
2020-03-30 12:59:22 63
原创 设计循环双端队列
题目:设计实现双端队列。你的实现需要支持以下操作:MyCircularDeque(k):构造函数,双端队列的大小为k。insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 true。delet...
2020-03-30 12:46:43 67
原创 整数反转
题目: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。思路:先将有符号整数各个位置上的数提取出来,通过栈,达到反转的效果。public class Solution { public int Reverse(int x) { int k = 1; int i; i...
2020-03-30 12:43:46 65
原创 逆波兰表达式求值
题目:根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。思路:运用栈,将输入的字符串从头依次放入栈中。每当检测到将存入栈中的字符为非数字,则提取出栈中的前两个数,运算后将新数存入栈中。最...
2020-03-23 21:19:22 109
原创 有效的括号
**题目:**给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。思路:从头遍历输入的字符串,每找到一对括号就删掉。如果存在单括号,就返回False,否则,返回truebool T = true; if ...
2020-03-23 21:14:25 51
原创 合并两个有序链表
题目:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。思路:对比两个有序链表中的元素,依次将较小的元素接在pHead后。public class Solution { public ListNode MergeTwoLists(ListNode l1, ListNode l2) { ListNode pHead=new L...
2020-03-16 19:42:14 58
原创 环形链表
题目:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。思路:如果有环存在,则一定是某个元素的下一个指向位置在它前面的元素。由第一步,则定义两个List Node类元素,一个用于判断,另一个用于回档。public class Solution { ...
2020-03-16 19:25:08 76
原创 删除排序链表中的重复元素
题目:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。思路:先确定链表的第一个元素,将它接到pHead后,然后将沿题设链表找到第一个与前一元素不同的项,顺序接到pHead后,以此类推。public class Solution { public ListNode DeleteDuplicates(ListNode head) { ListNode ...
2020-03-16 19:01:22 74
原创 链表应用
题目:我在写了一部分之后才知道还可以用窗体去做,我用了控制台链表的接口节点的封装可以定义一个类去单独存储每个城市的属性。不过由于这里只有三个属性,我觉得没必要在新建一个类。创建链表主函数程序调用详情...
2020-03-09 17:08:45 187
原创 猜一个一百以内的数
思路:先用random函数定义一个一百以内的随机数。然后通过if-else 语句判断输入的数与随机数的关系。static void Main(string[] args) { Console.WriteLine("已知一个100以内的数,请猜测这个数是多少"); Random R = new Rando...
2020-03-09 08:01:58 185
原创 买卖股票的最佳时机(二)题解
思路:只要后一天的价格比前一天高,我们就可以把他卖掉。这样就可以保证利益最大化。class Solution {public: int maxProfit(vector<int>& prices){ if(prices.size()<2) return 0; int i=0,j=1; int s...
2020-03-08 20:30:02 105
原创 买麦股票的最佳时机 题解
题目:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。思路:依据卖出价,从后往前依次求差,从而找出最大差价。class Solution {public: int maxProfit(vector<int>& pri...
2020-03-01 20:34:43 90
原创 合并两个有序数组 题解
思路:本题解法就是纯粹的暴力解法。先将两个数组合并后对新数组进行排序vector真贴心class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { copy(nums2.begin(),num...
2020-03-01 20:27:45 176
原创 最大子序和 题解
思路:这种算法有个前提,所求的最大子序和不能小于0.有了这个前提,我们就可以直接从左往右依次累加。每次累加之后,若和大于0,则把值赋给Max,否则就清空 和,重新开始累加。class Solution {public: int maxSubArray(vector<int>& nums) { int max,add; max...
2020-03-01 20:21:43 111
原创 移除元素解法
思路:因为不清楚数组内部的实际情况,所以需要分类判断1.1 数组为空1.2 数组有一个元素,但此元素需要移除1.3 数组有一个元素,此元素不需要移除1.4 一般情况2.对于一般情况,这里借鉴了 数组排序的冒泡法。通过前后元素的对比,逐渐将所需要移除的元素向数组尾部移动。3.最后,通过测算尾部需要删除的元素的个数,与数组大小相减所得的值,就是保留元素的长度(即返回值)in...
2020-02-23 18:32:58 115
原创 删除排序数组的重复项解法
思路:因为不确定数组的实际大小,应判断数组是否有重复项。如果没有则直接返回当前数组大小。2.要删除数组中的重复项,就需要找出数组到底有多少个不同的元素。所以在确定第一个数的前提下,按顺序提取元素与第一个数比较,就可以找到第二个非重复项。以此类推即可找到第n个非重复项。3.接下来只要按顺序将第二个一直到第n个非重复项依次排在第一个已知数后,即可完成任务。class Solution {...
2020-02-23 18:18:14 98
原创 两数相加解法
思路:求出每个数组元素与目标数的差值通过一个for循环来对比数组中是否同时存在元素与其差值。class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { int i,j; for(int a=0;a<nums.size(...
2020-02-23 18:02:52 138
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人