刷题
文章平均质量分 67
这不懂那不懂
这个作者很懒,什么都没留下…
展开
-
LeetCode --- 数学--- 69. x 的平方根
这个很容易就想到使用二分查找时间复杂度 private int BinarySearch(int start, int end, int target) { if (target < 2) return 1; while (start <= end) { v...原创 2020-03-04 12:02:45 · 214 阅读 · 0 评论 -
LeetCode --- 数学--- 67.二进制求和
本人看这题的时候脑回路清奇,竟让不由自主的想到了位运算。通过& 和^ 俩个操作可以快速的计算。且停止计算的条件是 & 的结果为0时候退出,如果不是就一直进行移位 , & 和 ^ 计算。具体原理我也太难描述但是有官方文档 public string AddBinary1(string a, string b) { var ...原创 2020-03-02 21:49:52 · 1101 阅读 · 0 评论 -
LeetCode --- 贪心算法 --- 1046. 最后一块石头的重量
C# 没有提供原生的优先队列,但是也可以用SortedList建立一个大顶Heap。但其实也可用通过递归的技术手段来实现。 public int LastStoneWeight(int[] stones) { if (stones.Length == 2) { return Math.Abs(st...原创 2020-02-19 23:29:20 · 309 阅读 · 0 评论 -
LeetCode --- 贪心算法 --- 1005.K此取反后最大化的数组和
这个题思路就是先把数组A进行排序,系统的Array.Sort()方法,但是里面的具体排序方法好像根据数据的长度来选择。我也不知道题目会有多长的数据,这里时间复杂度不好算了。官方文档介绍文档有了规律的数据后面就是一个O(n)时间内就可以算出最大值了。负数一律取反并且 K 自减1,到正数(包含 0)时候需要比较左边数据和本数据的大小选择一个最小的数据,在根据 K 的奇偶性进行后面的操作是否...原创 2020-02-17 21:01:10 · 189 阅读 · 0 评论 -
LeetCode --- 贪心算法 --- 944. 删列造序
这个最开始想复杂了但是核心思路也就那样后面也参考了更好的写法。时间复杂度O(n+m):想复杂的版本: public int MinDeletionSize1(string[] A) { if (A.Length == 0) return 0; var tmpSet = new HashSet&...原创 2020-02-16 00:42:44 · 148 阅读 · 0 评论 -
LeetCode --- 贪心算法 --- 874. 模拟行走机器人
这个可以自己标记一组数据,开始我是标记的角度然后去判断,但是我看了下题目给出的更好,使用数组标记信息简单明了直接了当:public int RobotSim(int[] commands, int[][] obstacles) { int[] dx = new int[] {0, 1, 0, -1}; int[] dy = new int[] ...原创 2020-02-16 00:36:50 · 253 阅读 · 0 评论 -
LeetCode --- 贪心算法 --- 860. 柠檬水找零
这个和日常数钱一个道理 你肯定是多少张5块的多少张10块的这样来考虑收钱对吧。所以消耗额外的空间少不了了。至于有人用for循环和我用递归其实都一样。至于时间复杂度都最坏就是 o(n)了。 public bool LemonadeChange(int[] bills) { if (bills[0] != 5) return...原创 2020-02-10 00:01:38 · 224 阅读 · 0 评论 -
LeetCode --- 贪心算法 --- 455.分发饼干
这个题目要尽可能的满足更多的孩子能得到饼干所以饼干和胃口要尽可能的相近,不能用很大的饼干满足胃口很小的孩子,这样容易浪费,得不到最大的数量。这样避免不了很多次查找遍历,最好的办法就是提前把胃口和饼干进行排序形成有序序列,在后面的查找中可以尽可能的减少时间。虽然排序也需要时间但是在代码整体整洁和可读性时间复杂度面前其实是最好的选择: public int FindContentC...原创 2020-02-08 16:03:23 · 258 阅读 · 0 评论 -
LeetCode --- 贪心算法 --- 392. 判断子序列
基本上目标串最坏要全部遍历一遍时间复杂度最坏O(n)有用二分 动态感觉太麻烦。最简单的就是双指针和IndexOf方法双指针: public bool IsSubsequence(string s, string t) { var sIndex = 0; if (s.Length <= 0) ...原创 2020-02-06 23:38:21 · 415 阅读 · 0 评论 -
LeetCode --- 贪心算法 --- 1221. 分割平衡字符串
这个思路很简单就是简单的计数。深层次理解可以想成用计数方式代替栈public class Solution { public int BalancedStringSplit(string s) { var maxCount = 0; var tmpCount = 0; for (int i = 0; i < s...原创 2020-02-05 23:49:33 · 187 阅读 · 0 评论 -
LeetCode --- 贪心算法 --- 122. 买卖股票的最佳时机 II
贪心算法最粗暴的理解就是:眼观局限,只能选择当下看起来最好的这个题目在官方的答案中有三种解决方案:暴力法;峰谷法;简单的一次遍历我采用的就是最后一种public class Solution { public int MaxProfit(int[] prices) { var maxProfit = 0; for (int i =...原创 2020-02-05 23:44:28 · 240 阅读 · 0 评论 -
反转字符串
输入一个字符串“this is sparta”返回一个字符串“siht si atraps”先来说个简单的例子://输入一个字符串,输出它的倒序字符串input: Hellooutput: olleH1.使用数组,也是最容易使用的...原创 2018-06-07 16:41:36 · 219 阅读 · 0 评论 -
移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。 public static void Method1(int[] nums) { int numIndex = 0; ...原创 2018-06-29 00:59:54 · 102 阅读 · 0 评论 -
合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4一个递归简单也好理解: /// <summary> /// 递归调用 /// </summary> ...原创 2018-07-12 00:17:19 · 126 阅读 · 0 评论 -
最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。这里直原创 2018-07-05 14:39:10 · 228 阅读 · 0 评论 -
删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 -- head = [4,5,1,9],它可以表示为: 4 -> 5 -> 1 -> 9示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4...原创 2018-07-05 15:30:35 · 238 阅读 · 0 评论 -
删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?双指针使用: public static ListNode Method1(ListNode ...原创 2018-07-05 16:47:56 · 266 阅读 · 0 评论 -
回文链表
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?第一种方法就是直接使用一个List把链表转成数组第二种就是可以简单的把链表进行翻转然后进行比较: /// <summary> /// 将链表复制...原创 2018-07-12 14:07:38 · 802 阅读 · 0 评论 -
环形链表
给定一个链表,判断链表中是否有环。进阶:你能否不使用额外空间解决此题?链表中快慢指针,循环递归看来是经常使用的办法 public static bool Method1(ListNode head) { ListNode slow = head; ListNode fast = head; while (fas...原创 2018-07-12 15:35:19 · 222 阅读 · 0 评论 -
反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?一个迭代循环: /// <summary> /// 遍历时直接将指针反转,这样比较高效,需处理好前后指针关系 ///...原创 2018-07-06 14:38:58 · 225 阅读 · 0 评论 -
对称二叉树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [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说明:如果你可以运用递归和迭代两种方法...原创 2018-08-05 22:51:38 · 268 阅读 · 0 评论 -
验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 ...原创 2018-07-17 14:55:26 · 492 阅读 · 0 评论 -
二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。 /// <summary> ...原创 2018-07-17 10:49:24 · 279 阅读 · 0 评论 -
数数并说
报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 "one 1" ("一个一") , 即 11。11 被读作 "two 1s" ("两个一"), 即 21。21 被读作 "one 2", "one 1" ("一个二&am原创 2018-07-04 13:46:57 · 180 阅读 · 0 评论 -
有效的数独
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 '.' 表示。示例 1:输入:[ ["5","3",".",".","7",".","原创 2018-06-29 18:26:12 · 709 阅读 · 0 评论 -
两个数组的交集 II
给定两个数组,写一个方法来计算它们的交集。例如:给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].注意: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。 我们可以不考虑输出结果的顺序。跟进:如果给定的数组已经排好序呢?你将如何优化你的算法?如果 nums1 的大小比 nums2 小很多,哪种方法更优?如果nums2的元...原创 2018-06-24 16:58:05 · 362 阅读 · 0 评论 -
构造一个8位数字,该数字的每一位都不重复
构造一个8位数字,该数字的每一位都不重复???像这种题目最土鳖的做法就是Random一个随机数字判断是否与之前的数字重复,如果重复则重新随机,其实想了想这种方法实在效率不高真的。但是针对这个题目可以有一个比较好理解的做法虽然效率也是个问题。 public static int Method1() { List<string> nums = new...原创 2018-06-08 22:32:23 · 3775 阅读 · 0 评论 -
无重复字符的最长子串
给定一个字符串,找出不含有重复字符的最长子串的长度。示例:给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列 而不是子串。首先什么是子串???子串:串中任意个连续原创 2018-06-20 23:36:50 · 127 阅读 · 0 评论 -
只出现一次的数字
只出现一次的数字给定一个整数数组,除了某个元素外其余元素均出现两次。请找出这个只出现一次的元素。 备注:你的算法应该是一个线性时间复杂度。 你可以不用额外空间来实现它吗?这个题目方法有很多的:解法1:像这种数组题目,还是有重复数组的题目其实很容易就想到一个方法。。。Array.Sort();就这么简单暴力,直观明了。直接使用这个方法把数组一排,省事简单。这样排出的数组就有很明显的特征,只要有重复...原创 2018-03-31 14:28:19 · 3059 阅读 · 1 评论 -
旋转数组
旋转数组将包含 n 个元素的数组向右旋转 k 步。例如,如果 n = 7 , k = 3,给定数组 [1,2,3,4,5,6,7] ,向右旋转后的结果为 [5,6,7,1,2,3,4]。注意:尽可能找到更多的解决方案,这里最少有三种不同的方法解决这个问题。感觉这个题目还是可以的。首先要明白什么是一维数组向右旋转几步(当然肯定会有对应向左旋转几步喽,说不定也有向上或者向下旋转啦,呵呵自己go...原创 2018-03-25 01:51:21 · 7068 阅读 · 5 评论 -
买卖股票的最佳时机
买卖股票的最佳时机 II假设有一个数组,它的第 i 个元素是一个给定的股票在第 i 天的价格。设计一个算法来找到最大的利润。你可以完成尽可能多的交易(多次买卖股票)。然而,你不能同时参与多个交易(你必须在再次购买前出售股票)。上面是题目描述,没有太看懂,百度了一下大体明白了什么意思,但是你实际过程中应该不会这么操作吧。。。。直接上码子: private static int MaxProfit(i...原创 2018-03-25 01:20:15 · 350 阅读 · 0 评论 -
旋转图像
给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3]]示例 2:给定...原创 2018-06-30 02:07:47 · 125 阅读 · 0 评论 -
两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]这个比较简单网上面有很多答案,核心的思路就是元素X,并且查找是否存在一个target-X的元素在目标数组中。...原创 2018-06-19 21:07:07 · 152 阅读 · 0 评论 -
反转字符串
请编写一个函数,其功能是将输入的字符串反转过来。示例:输入:s = "hello"返回:"olleh"使用Reverse方法: public static string Method1(string str) { char[] chars = str.ToCharArray(); Array.Reverse(chars);//生成反...原创 2018-07-01 15:11:17 · 155 阅读 · 0 评论 -
实现strStr()
实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", needle = "bba"输出...原创 2018-07-03 14:44:06 · 737 阅读 · 2 评论 -
字符串转整数 (atoi)
实现 atoi,将字符串转为整数。在找到第一个非空字符之前,需要移除掉字符串中的空格字符。如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值。如果第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。字符串可以在形成整数的字符后面包括多余的字符,这些字符可以被忽略,它们对于函数没有影响。当字符串中的第一个非空字符序列不是个...原创 2018-07-03 12:53:32 · 261 阅读 · 0 评论 -
加一
给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。直接上代码: p...原创 2018-06-27 17:49:28 · 240 阅读 · 0 评论 -
验证回文字符串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false思路就是找到合适就比较不合适就往下一位继续找: public static bool Method1(str...原创 2018-07-02 19:11:05 · 357 阅读 · 0 评论 -
有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?简单代码: p...原创 2018-07-02 17:39:15 · 308 阅读 · 0 评论 -
俩数相加
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807下面是官方的思路答案思路我们使用变量来跟踪进位,并从包...原创 2018-06-20 14:52:36 · 171 阅读 · 0 评论