算法
子胤
这个作者很懒,什么都没留下…
展开
-
解决递归栈溢出:尾递归
原文:尾递归_百度百科尾递归如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的。当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归。尾递归函数的特点是在回归过程中不用做任何操作,这个特性很重要,因为大多数现代的编译器会利用这种特点自动生成优化的代码。目录1原理 2实例原理当编译器检测到一个函数调用是尾递归的时候,它就覆盖当前的活动记录而不是在栈中去创建一个新的。编译器可以做到这点,因为递归调用是当前活..转载 2022-01-18 10:38:06 · 434 阅读 · 0 评论 -
Leetcode1143. 最长公共子序列(c#)
题解:力扣public class Solution { public int LongestCommonSubsequence(string text1, string text2) { int num1 = text1.Length; int num2 = text2.Length; int[,] dp = new int[num1 + 1, num2 + 1]; for(int i = 0; i < ...原创 2021-11-09 23:55:03 · 86 阅读 · 0 评论 -
LeetCode695. 岛屿的最大面积(C#)
DFS经典题,两种方法,递归或者用栈1.递归public class Solution { public int MaxAreaOfIsland(int[][] grid) { int rows = grid.Length; int cols = grid[0].Length; int res = 0; for(int i = 0; i < rows; i++) { f原创 2021-10-06 16:35:08 · 103 阅读 · 0 评论 -
Hash和红黑树以及其在C#中的应用
参考资料:https://www.cnblogs.com/jilodream/p/4219840.htmlhttps://blog.csdn.net/fdyshlk/article/details/76762604https://www.yisu.com/zixun/13735.html一、基本概念Hash和红黑树是两种数据存储的方式。除了这两种存储方式,最常用的是线性结构存储,比如数组和链表List等线性结构。对于线性存储的数据,如果想检索一个数据,需要把所有数据都遍历一遍,然后找原创 2020-09-09 12:10:37 · 1533 阅读 · 0 评论 -
leetcode 调整数组顺序使奇数位于偶数前面
解法一:双指针 public int[] Exchange(int[] nums) { int head = 0; int tail = nums.Length - 1; while(head < tail) { if((nums[head] & 1) == 1) { head++; continue; ..原创 2020-07-11 09:42:14 · 158 阅读 · 0 评论 -
leetcode 打印从1到最大的n位数
书上原题本想考的是大数问题,但是leetcode上要求的返回值是int,不可能出现当n过大时大数越界的问题,失去了本题的意义。按大数问题处理,用string和递归来处理该问题。public class Solution { public int[] PrintNumbers(int n) { List<int> resList = new List<int>(); char[] bigNumber = new ch...原创 2020-06-30 20:34:12 · 185 阅读 · 0 评论 -
leetcode 191. 位1的个数
经典题目,位操作的小技巧:与操作我们可以把前面的算法进行优化。我们不再检查数字的每一个位,而是不断把数字最后一个 1反转,并把答案加一。当数字变成 00 的时候偶,我们就知道它没有 1的位了,此时返回答案。这里关键的想法是对于任意数字 n,将 n 和 n - 1做与运算,会把最后一个 1的位变成 0。为什么?考虑 n和 n - 1的二进制表示。在二进制表示中,数字 n中最低位的 1总是对应 n - 1中的 0。因此,将 n和 n−1 与运算总是能把 n 中最低位的 1...原创 2020-06-20 09:40:47 · 125 阅读 · 0 评论 -
leetcode 面试题22. 链表中倒数第k个节点
/** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNode next; * public ListNode(int x) { val = x; } * } */public class Solution { public ListNode GetKthFromEnd(ListNode head, ...原创 2020-06-13 20:23:55 · 171 阅读 · 0 评论 -
数据结构--Dijkstra算法最清楚的讲解
https://blog.csdn.net/heroacool/article/details/51014824?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase.转载 2020-06-03 10:37:35 · 200 阅读 · 0 评论 -
leetcode 509. 斐波那契数
方法一:递归使用递归计算给定整数的斐波那契数。效率最差但是最简单的方法,会重复计算,就不实现了。方法二:记忆化自底向上的方法方法三:自底向上进行迭代方法四:矩阵求幂public class Solution { /* 滑动变量 自底向上进行迭代 public int Fib(int N) { if(N < 2) return N; int p...原创 2020-06-01 20:51:49 · 194 阅读 · 0 评论 -
LeetCode 240. 搜索二维矩阵
因为矩阵的行和列是排序的(分别从左到右和从上到下),所以在查看任何特定值时,我们可以修剪O(m)O(m)或O(n)O(n)元素。算法:首先,我们初始化一个指向矩阵左下角的 (row,col)(row,col) 指针。然后,直到找到目标并返回 true(或者指针指向矩阵维度之外的 (row,col)(row,col) 为止,我们执行以下操作:如果当前指向的值大于目标值,则可以 “向上” 移动一行。 否则,如果当前指向的值小于目标值,则可以移动一列。不难理解为什么这样做永远不会删减正确的答案;因为行是..原创 2020-05-24 17:49:43 · 304 阅读 · 0 评论 -
LeetCode 235. 二叉搜索树的最近公共祖先
题解官方的题解就很清晰https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree/solution/er-cha-sou-suo-shu-de-zui-jin-gong-gong-zu-xian--2/方法一:递归public class Solution { public TreeNode LowestCommonAncestor(TreeNode root, Tree...原创 2020-05-13 21:52:27 · 128 阅读 · 0 评论 -
LeetCode 1. 两数之和
为了对运行时间复杂度进行优化,我们需要一种更有效的方法来检查数组中是否存在目标元素。如果存在,我们需要找出它的索引。保持数组中的每个元素与其索引相互对应的最好方法是什么?哈希表。通过以空间换取速度的方式,我们可以将查找时间从 O(n)降低到 O(1)。哈希表正是为此目的而构建的,它支持以 近似 恒定的时间进行快速查找。我用“近似”来描述,是因为一旦出现冲突,查找用时可C#里用Dic...原创 2020-04-21 23:34:34 · 86 阅读 · 0 评论 -
LeetCode面试题03. 数组中重复的数字
方法一:遍历数组由于只需要找出数组中任意一个重复的数字,因此遍历数组,遇到重复的数字即返回。为了判断一个数字是否重复遇到,使用集合存储已经遇到的数字,如果遇到的一个数字已经在集合中,则当前的数字是重复数字。public class Solution { public int FindRepeatNumber(int[] nums) { HashSet<...原创 2020-04-20 18:43:15 · 146 阅读 · 0 评论 -
LeetCode 97: 交错字符串
这里我们考虑用 s1和 s2的某个前缀是否能形成 s3的一个前缀。这个方法的前提建立于:判断一个 s3的前缀(用下标 k表示),能否用 s1和 s2的前缀(下标分别为 i和 j),仅仅依赖于 s1 前 i个字符和 s2前 j个字符,而与后面的字符无关。为了实现这个算法, 我们将使用一个 2D 的布尔数组 dp。dp[i][j]表示用 s1的前 i和 s2的前 j个字符,总...原创 2020-04-18 12:33:51 · 170 阅读 · 0 评论 -
贝塞尔曲线
文章参考于:https://www.jianshu.com/p/0c9b4b681724贝赛尔曲线的前世今生:贝塞尔曲线,这个命名规则一眼看上去大概是一个叫贝塞尔的数学家发明的。但,贝塞尔曲线依据的最原始的数学公式,是在1912年在数学界广为人知的伯恩斯坦多项式。简单理解,伯恩斯坦多项式可以用来证明,在[ a, b ] 区间上所有的连续函数都可以用多项式来逼近,并且收敛性很强,也就...原创 2020-04-13 15:05:57 · 609 阅读 · 0 评论 -
LeetCode 286. 墙与门 多源BFS和DFS
思路1: DFS,对于每个门进行一次DFS搜索,记录每个位置对每个门的距离,当有更小距离的门时更新这个数值 public void WallsAndGates(int[][] rooms) { for (int i = 0; i < rooms.GetLength(0); i++) { for (in...原创 2020-04-11 10:32:47 · 389 阅读 · 0 评论 -
LeetCode 面试题57 - II(剑指offer) 和为s的连续正数序列
今天毕业五年了,一直忙于工作和享受,自从当年找完工作后就一直没有再刷过题,作为搬砖的码农,觉得还是应该养成长期刷题的习惯坚持下去。之前坚持了每天被一会单词,如今雅思一本也快看完了,从今天开始准备在保证每周一题的最低基础上坚持下去,不为别的,主要是想多动脑,刷个几十年坚持下去,应该可以预防老年痴呆。。。题目:滑动窗口的解法:注意蛋疼的int[][]返回值类型,十分蛋疼public...原创 2020-04-08 23:34:49 · 175 阅读 · 0 评论