algorithm
步行者之神
这个作者很懒,什么都没留下…
展开
-
走自己的路----974. 和可被 K 整除的子数组
给定一个整数数组 A,返回其中元素之和可被 K整除的(连续、非空)子数组的数目。示例:输入:A = [4,5,0,-2,-3,1], K = 5输出:7解释:有 7 个子数组满足其元素之和可被 K = 5 整除:[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]提示:1 <= A.length <= 30000-10000 <= A[i] <=...原创 2020-05-27 17:13:48 · 169 阅读 · 0 评论 -
走自己的路----130. 被围绕的区域【通俗易懂】
给定一个二维的矩阵,包含'X'和'O'(字母 O)。找到所有被 'X' 围绕的区域,并将这些区域里所有的'O' 用 'X' 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的'O'都不会被填充为...原创 2020-04-28 19:59:26 · 282 阅读 · 0 评论 -
走自己的路----54. 螺旋矩阵
给定一个包含m x n个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例1:输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]输出: ...原创 2020-04-26 22:37:51 · 134 阅读 · 0 评论 -
走自己的路----46. 全排列
给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] public List<List<Integer>> permute(int[] nums) { List&...原创 2020-04-25 21:14:31 · 100 阅读 · 0 评论 -
走自己的路----面试题51. 数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [7,5,6,4]输出: 5限制:0 <= 数组长度 <= 50000 int res = 0; public int reversePairs(int[] nums) { if...原创 2020-04-24 11:35:49 · 178 阅读 · 0 评论 -
走自己的路----240. 搜索二维矩阵 II
编写一个高效的算法来搜索mxn矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17,...原创 2020-04-20 20:18:17 · 102 阅读 · 0 评论 -
走自己的路----542. 01 矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例 1:输入:0 0 00 1 00 0 0输出:0 0 00 1 00 0 0示例 2:输入:0 0 00 1 01 1 1输出:0 0 00 1 01 2 1注意:给定矩阵的元素个数不超过 10000。给定矩阵中至少有一个元素是 0。...原创 2020-04-15 15:34:38 · 159 阅读 · 0 评论 -
走自己的路----300. 最长上升子序列 【动态规划】
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是[2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 public int lengthOfLIS(int[] nums) { if(nums....原创 2020-04-15 09:32:40 · 110 阅读 · 0 评论 -
走自己的路----79. 单词搜索
给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word = "ABC...原创 2020-04-13 11:15:33 · 100 阅读 · 0 评论 -
走自己的路----347. 前 K 个高频元素
给定一个非空的整数数组,返回其中出现频率前k高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]说明:你可以假设给定的k总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) ,n是数组的大小。...原创 2020-04-11 23:22:57 · 107 阅读 · 0 评论 -
走自己的路----19. 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。进阶:你能尝试使用一趟扫描实现吗?public ListNode removeNthFromEnd(L...原创 2020-04-10 14:49:07 · 84 阅读 · 0 评论 -
走自己的路----5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"public String longestPalindrome(String s) { if(s==null||s.length(...原创 2020-04-09 15:11:37 · 94 阅读 · 0 评论 -
自己的路------3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"w...原创 2020-04-08 12:12:50 · 147 阅读 · 0 评论 -
378. 有序矩阵中第K小的元素
给定一个n x n矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。示例:matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15]],k = 8,返回 13。提示:你可以假设 k 的值永远是有效的, 1 ≤ k ≤ n2...原创 2020-04-08 10:37:18 · 215 阅读 · 0 评论 -
105. 从前序与中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7解法:public TreeNode buildTree(int...原创 2020-04-01 14:21:37 · 87 阅读 · 0 评论 -
230. 二叉搜索树中第K小的元素
给定一个二叉搜索树,编写一个函数kthSmallest来查找其中第k个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \1 4 \ 2输出: 1示例 2:输入: root = [5,3,6,2,4,null,null,1],...原创 2020-03-30 21:45:04 · 91 阅读 · 0 评论 -
94. 二叉树的中序遍历
给定一个二叉树,返回它的中序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶:递归算法很简单,你可以通过迭代算法完成吗?解法1:递归 public List<Integer> inorderTraversal(TreeNode root) { List&...原创 2020-03-29 13:28:11 · 84 阅读 · 0 评论 -
179. 最大数
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1:输入: [10,2]输出: 210示例2:输入: [3,30,34,5,9]输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。解法1: public String largestNumber(int[] nums) { quickSort(n...原创 2020-03-26 20:00:11 · 93 阅读 · 0 评论 -
945. 使数组唯一的最小增量
给定整数数组 A,每次 move 操作将会选择任意A[i],并将其递增1。返回使 A中的每个值都是唯一的最少操作次数。示例 1:输入:[1,2,2]输出:1解释:经过一次 move 操作,数组将变为 [1, 2, 3]。示例 2:输入:[3,2,1,2,1,7]输出:6解释:经过 6 次 move 操作,数组将变为 [3, 4, 1, 2, 5, 7]。可以看出 ...原创 2020-03-22 16:34:37 · 82 阅读 · 0 评论 -
56. 合并区间
给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。...原创 2020-03-19 14:00:42 · 93 阅读 · 0 评论 -
1160. 拼写单词
给你一份『词汇表』(字符串数组)words和一张『字母表』(字符串)chars。假如你可以用chars中的『字母』(字符)拼写出 words中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。注意:每次拼写时,chars 中的每个字母都只能用一次。返回词汇表words中你掌握的所有单词的 长度之和。示例 1:输入:words = ["cat","b...原创 2020-03-17 21:53:47 · 75 阅读 · 0 评论 -
14 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入: ["flower","flow","flight"]输出: "fl"示例2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母a-z。解法一:直接法 public String ...原创 2020-03-16 22:46:29 · 60 阅读 · 0 评论 -
695. 岛屿的最大面积
DFS解决,核心:递归的时候注意把当前找到的岛屿置零~public int maxAreaOfIsland(int[][] grid) { int res = 0; for(int i=0;i<grid.length;i++){ for(int j=0;j<grid[i].length;j++){ ...原创 2020-03-15 17:00:46 · 62 阅读 · 0 评论 -
543. 二叉树的直径
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回3, 它的长度是路径 [4,2,1,3] 或者[5,2,1,3]。注意:两结点之间的路径长度是...原创 2020-03-10 21:56:35 · 82 阅读 · 0 评论 -
和为s的连续正数序列
这个算法是这样的:先找出2个连续的和为target的数,再找出连续的3个、4个......怎么找呢?其实是算出来的。这里我每次算出序列中最小的那个数。假设有2个数的和等于target,设最小的那个数的值为n,显然n+(n+1)=target,则n=(target-1)/2;如果没有2个数的和为target,那么假设有3个,则有n+(n+1)+(n+2)=target,n=(target-1-2)/...原创 2020-03-08 21:10:16 · 75 阅读 · 0 评论 -
判断一颗树是否为二叉搜索树
10 / \ 5 15 -------- binary tree (1) / \ 6 20假定当前结点值为k。对于二叉树中每个结点,判断其左孩子的值是否小于k,其右孩子的值是否大于k。如果所有结点都满足该条件,则该二叉树是一棵二叉搜索树。很不幸的是,这个算法是错误的。考虑上面的二叉树,它符合上面算法的条件,但是它不是一棵二叉搜索转载 2017-06-05 21:56:33 · 470 阅读 · 0 评论 -
凸多边形直径
我们将一个多边形上任意两点间的距离的最大值定义为多边形的直径。 确定这个直径的点对数可能多于一对。 事实上, 对于拥有 n 个顶点的多边形, 就可能有 n 对“直径点对”存在。 一个多边形直径的简单例子如左图所示。 直径点对在图中显示为被平行线穿过的黑点 (红色的一对平行线). 直径用浅蓝色高亮显示。显然, 确定一个凸多边形 P 直径的点对不可能在多边形 P 内部。原创 2017-05-17 14:20:16 · 2471 阅读 · 0 评论 -
动态规划题目
想兑换100元钱,有1,2,5,10四种钱,问总共有多少兑换方法。下面提供两种实现方式,其中代码注释的很清楚。关于动态规划的基本原理,参考:http://www.cnblogs.com/sdjl/articles/1274312.html2. 递归解法[cpp] view plain c原创 2017-05-25 20:19:23 · 302 阅读 · 0 评论 -
泰森多边形(Voronoi图)生成算法
一、 文章目的 本文描述了在geomodel模块中,生成泰森多边形所使用的算法。二、 概述 GIS和地理分析中经常采用泰森多边形进行快速插值,和分析地理实体的影响区域,是解决邻接度问题的又一常用工具。荷兰气候学家A·H·Thiessen提出了一种根据离散分布的气象站的降雨量来计算平均降雨量的方法,即将所有相邻气象站连成三角形,作这些原创 2016-11-02 08:46:22 · 7131 阅读 · 1 评论 -
PID算法控制
PID算法控制从网上找的PID讲解,感觉还不错,是基于电机的PID控制讲的:PID算法原理及调整规律一、PID算法简介首先必须明确PID算法是基于反馈的。一般情况下,这个反馈就是速度传感器返回给单片机当前电机的转速。简单的说,就是用这个反馈跟预设值进行比较,如果转速偏大,就减小电机两端的电压;相反,则增加电机两端的电压。 顾名思义,P指是比例(Proportion),I原创 2016-11-16 09:26:07 · 1117 阅读 · 0 评论 -
经典A* 算法解析
会者不难,A*(念作A星)算法对初学者来说的确有些难度。这篇文章并不试图对这个话题作权威的陈述。取而代之的是,它只是描述算法的原理,使你可以在进一步的阅读中理解其他相关的资料。最后,这篇文章没有程序细节。你尽可以用任意的计算机程序语言实现它。如你所愿,我在文章的末尾包含了一个指向例子程序的链接。 压缩包包括C++和BlitzBasic两个语言的版本,如果你只是想看看它的运行效果,里面还包含转载 2016-11-11 18:34:44 · 3543 阅读 · 0 评论 -
lintcode ----数字组合
回溯法void backtracking(vector> &res,vector &tem,vector &cand,int cur,int n,int left) { map,int> m; if(left==0) { if(m.count(tem)==0)原创 2016-07-04 11:56:19 · 337 阅读 · 0 评论