算法
一点一滴g
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
二分查找
二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回对应的数组下标,没有找到返回-1;如下示例,其中有序数组中, 是按照从小到大的顺序排列的。非递归实现:public int erfen(int arr[], int key){ int[] arr = {1,3,5,7,9,11,15,24}; int sta...原创 2019-04-18 20:17:17 · 135 阅读 · 0 评论
-
leetcode222. 完全二叉树的节点个数
题目描述给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例:输入:1/ 2 3/ \ /4 5 6输出: 6题解完全二叉树是一棵空树或者它的叶子节点只出在最后两层,...原创 2019-09-04 16:06:56 · 251 阅读 · 0 评论 -
leetcode49. 字母异位词分组
题目描述给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]题解当且仅当它们的排序字符串相等时,两个字符串是字母异位词。维护一个集合,将排序后的序...原创 2019-08-06 20:49:04 · 144 阅读 · 0 评论 -
leetcode62. 不同路径
题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?题解典型的动态规划问题,除了第一行和第一列都是一条以外,剩下的位置是左边和上边节点的路径之和。class Solution { public int uniqu...原创 2019-08-08 23:49:41 · 179 阅读 · 0 评论 -
leetcode55. 跳跃游戏
题目描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位...原创 2019-08-08 23:39:14 · 192 阅读 · 0 评论 -
leetcode198. 打家劫舍
题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后...原创 2019-08-06 17:27:09 · 123 阅读 · 0 评论 -
leetcode1015. 可被 K 整除的最小整数
题目描述给定正整数 K,你需要找出可以被 K 整除的、仅包含数字 1 的最小正整数 N。返回 N 的长度。如果不存在这样的 N,就返回 -1。题解很明显,能被2或5整除的数不存在使用暴力法取K作为上限class Solution { public int smallestRepunitDivByK(int K) { if(K % 2 == 0 || K % 5 ...原创 2019-07-28 21:06:09 · 353 阅读 · 0 评论 -
解读十大经典排序算法
原文出处:http://cmsblogs.com排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:关于时间复杂度:1、平方阶 (O(n2)) 排序 各类简单排序:直接...原创 2019-05-20 23:14:43 · 305 阅读 · 0 评论 -
LeetCode139. 单词拆分
题目描述给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可...原创 2019-05-07 23:48:00 · 199 阅读 · 0 评论 -
LeetCode133. 克隆图
题目描述给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆)。图中的每个节点都包含它的值 val(Int) 和其邻居的列表(list[Node])。示例:输出:{"$ id":“1”,“neighbors”:[{" $ id":“2”,“neighbors”:[{"$ ref":“1”},{"$ id":“3”,“neighbors”:[{" $ ref":“2”},{" $ id...原创 2019-05-19 21:25:00 · 320 阅读 · 0 评论 -
LeetCode150. 逆波兰表达式求值
题目描述根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: [“2”, “1”, “+”, “3”, “*”]输出: 9解释: ((2 + 1) * 3) = 9示例 2...原创 2019-05-19 21:08:45 · 135 阅读 · 0 评论 -
LeetCode739.每日温度
题目描述根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请输入 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的都是...原创 2019-05-06 21:54:03 · 399 阅读 · 0 评论 -
leetcode494. 目标和
题目描述给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例 1:输入: nums: [1, 1, 1, 1, 1], S: 3输出: 5解释:-1+1+1+1+1 = 3+1-1+1+1+1 = 3...原创 2019-05-09 11:48:25 · 257 阅读 · 0 评论 -
leetcode113. 路径总和 II
题目描述给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1...原创 2019-05-08 19:38:58 · 111 阅读 · 0 评论 -
leetcode752. 打开转盘锁
题目描述你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转:例如把 ‘9’ 变为 ‘0’,‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 ‘0000’ ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一...原创 2019-05-06 11:02:39 · 262 阅读 · 0 评论 -
leetcode 322. 零钱兑换
题目描述给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1题...原创 2019-08-09 11:54:23 · 104 阅读 · 0 评论 -
leetcode334. 递增的三元子序列
题目描述给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。数学表达式如下:如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1,使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否则返回 false 。说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1) 。示例 1:输...原创 2019-08-07 13:12:19 · 171 阅读 · 0 评论 -
leetcode328. 奇偶链表
题目描述给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5-&g...原创 2019-08-07 14:14:26 · 147 阅读 · 0 评论 -
leetcode915. 分割数组
题目描述给定一个数组 A,将其划分为两个不相交(没有公共元素)的连续子数组 left 和 right, 使得:left 中的每个元素都小于或等于 right 中的每个元素。left 和 right 都是非空的。left 要尽可能小。在完成这样的分组后返回 left 的长度。可以保证存在这样的划分方法。题解不检验 all(L <= R for L in left for R ...原创 2019-09-03 18:06:30 · 238 阅读 · 0 评论 -
判断二叉树是否是完全二叉树
题目描述给定一棵二叉树,判断该树是否是完全二叉树题解/** * 判断是否是完全二叉树 * @param node */ public static boolean isGoodBinaryTree(Node node){ if (node == null) return false; Queue&...原创 2019-08-29 17:32:33 · 544 阅读 · 0 评论 -
leetcode75. 颜色分类
题目描述给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]题解用三个指针指向0的最右边界、当前元素、2的最左边界...原创 2019-08-28 17:18:14 · 159 阅读 · 0 评论 -
leetcode69. x 的平方根
题目描述实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。注:如只需要解本题,代码如下:class Solution { ...原创 2019-08-28 16:43:01 · 191 阅读 · 0 评论 -
leetcode962. 最大宽度坡
题目描述给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 A[i] <= A[j]。这样的坡的宽度为 j - i。找出 A 中的坡的最大宽度,如果不存在,返回 0 。示例 1:输入:[6,0,8,2,1,5]输出:4解释:最大宽度的坡为 (i, j) = (1, 5): A[1] = 0 且 A[5] = 5.题解对于每一个形如 A[i] = ...原创 2019-08-26 18:09:25 · 438 阅读 · 0 评论 -
leetcode1104. 二叉树寻路
题目描述在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是由途经的节点标号所组成的。示例 ...原创 2019-08-26 13:12:13 · 271 阅读 · 0 评论 -
leetcode560. 和为K的子数组
题目描述给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。题解思路一:暴力求解class Solution { public int subarraySum(int[] nums, int k) { if...原创 2019-08-26 12:07:55 · 214 阅读 · 0 评论 -
leetcode452. 用最少数量的箭引爆气球
题目描述在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤...原创 2019-08-26 11:22:29 · 633 阅读 · 0 评论 -
leetcode41. 缺失的第一个正数
题目描述给定一个未排序的整数数组,找出其中没有出现的最小的正整数。示例 1:输入: [1,2,0]输出: 3示例 2:输入: [3,4,-1,1]输出: 2题解需要明确的一个点是没有出现的最小正数一定小于等于数组长度+1,只要从1开始连续的递增序列才会相等,否则一定是小于的,这样我们可以选取小于数组长度+2的元素作为键进行存储,最后遍历数组,第一个未被标记的下标即为最小正...原创 2019-08-22 16:51:30 · 139 阅读 · 0 评论 -
leetcode 300. 最长上升子序列
题目描述给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。题解思路一:动态规划dp[i]:表示以第 i 个数字为结尾的“最长上升子序列”的长度。即在 [0, …, i] 的范围内,选择 以数字 nums[i] 结尾 可以获得的最长上升子序列的...原创 2019-08-11 15:42:00 · 167 阅读 · 0 评论 -
K数之和
题目描述在一个数组中找出K个和为target的组合题解提供一个通用模版class Solution {public List<List<Integer>> fourSum(int[] nums, int target) { return kSum(nums,target,4); } public List<List<I...原创 2019-08-15 10:42:36 · 282 阅读 · 0 评论 -
leetcode160. 相交链表
题目描述编写一个程序,找到两个单链表相交的起始节点。题解创建两个指针 pApA 和 pBpB,分别初始化为链表 A 和 B 的头结点。然后让它们向后逐结点遍历。当 pApA 到达链表的尾部时,将它重定位到链表 B 的头结点 (你没看错,就是链表 B); 类似的,当 pBpB 到达链表的尾部时,将它重定位到链表 A 的头结点。若在某一时刻 pApA 和 pBpB 相遇,则 pApA/pBp...原创 2019-08-19 14:50:34 · 265 阅读 · 0 评论 -
leetcode152. 乘积最大子序列
题目描述给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。题解使用动态规划的思想,遍历数组时计算当前最大值,不断更新令imax为当...原创 2019-08-14 11:48:48 · 118 阅读 · 0 评论 -
leetcode215. 数组中的第K个最大元素
题目描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4题解1.最容易想到的就是先排序,然后获取下标为length - k 的元素2.使用堆排序...原创 2019-08-19 14:11:15 · 247 阅读 · 0 评论 -
找贝壳
题目描述牛牛和妞妞去海边捡了一大袋美丽的贝壳,千辛万苦地运回家后,牛牛和妞妞打算分掉这些贝壳。牛牛提出,他和妞妞轮流从还没有分配的贝壳中取一定数量的贝壳,直到贝壳分完为止。分配规则是牛牛每次取剩余贝壳的1/10(向下取整),妞妞每次固定取m个贝壳,妞妞先取。妞妞想要得到不少于一半的贝壳,又不想太过分,那么她一次最少取多少个贝壳才能得到不少于一半的贝壳呢?输入描述:一个正整数n,表示贝壳...原创 2019-04-29 20:52:47 · 578 阅读 · 0 评论 -
N-GCD
题目描述小明很喜欢数对,又很喜欢GCD(最大公约数)。所以他想尽办法创造了一种全新的最大公约数:给出若干个数对(ai,bi),如果一个最大的质数x可以整除每一个数对中的至少一个数字并且这个数字大于1,那么x就称为这些数对的N-GCD。现在小明给了你一些数对,希望你可以算出它们的N-GCD。输入描述:第一行一个数字n,表示数对的个数。接下来n行,每行两个数字,用一个空格分隔,表示一个数...原创 2019-04-29 18:06:12 · 431 阅读 · 0 评论 -
leetcode142. 环形链表 II
题目描述给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index...原创 2019-04-22 18:23:42 · 102 阅读 · 0 评论 -
leetcode387-字符串中的第一个唯一字符
题目描述给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = “leetcode”返回 0.s = “loveleetcode”,返回 2.注意事项:您可以假定该字符串只包含小写字母。题解整体思路还是先统计然后查找。第一步:新建一个长度为26的数组,存放字母a-z出现的次数,然后遍历字符串统计出这些次数。第二步:我们的目标...原创 2019-04-17 18:23:53 · 129 阅读 · 0 评论 -
leetcode344-反转字符串
题目描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符示例 1:输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例2:输入...原创 2019-04-17 18:05:30 · 175 阅读 · 0 评论 -
leetCode19---删除链表的倒数第N个节点
题目描述给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?题解使用两个指针。第一个指针从列表的开头向前移动 n+1n+1 步,...原创 2019-04-22 12:57:33 · 109 阅读 · 0 评论 -
leetcode48-旋转图像
题目描述给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]示例 2:给定...原创 2019-04-17 16:37:29 · 147 阅读 · 0 评论 -
leetcode36-有效的数独
题目描述判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 ‘.’ 表示。示例 1:输入:[[“5”,“3”,".",".",“7”,"...原创 2019-04-17 14:27:32 · 194 阅读 · 0 评论
分享