
算法
文章平均质量分 50
常用算法题解答
evan_qb
冰冻三尺,非一日之寒
展开
-
常见排序算法汇总(下)
开篇问题:如何根据年龄给100万用户数据排序以下几种排序就比较适用这种数据量比较大的场景。桶排序核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排完序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了。如果每个桶的数据分布不均匀,可以在数据比较多的桶里继续划分数据。桶排序比较适合用在外部排序中。所谓的外部排序就是数据存储在外部磁盘中,数据量比较大,内存有限,无法将数据全部加载到内存中。容器版public static voi.原创 2021-04-22 19:47:51 · 372 阅读 · 0 评论 -
常见排序算法汇总(中)
上篇文章讲到了:冒泡排序、插入排序、选择排序,这篇文章我们讲归并排序和快速排序。常见排序算法汇总(上)归并排序归并排序主要把数组从中间分成两部分,然后对前后两部分进行排序下,再将排好序的两部分合并在一起,这样整个数组就有序了。代码实现:public static void mergeSort(int[] arr) { sort(arr, 0, arr.length - 1);}public static void sort(int[] arr, i...原创 2021-04-21 09:30:10 · 285 阅读 · 0 评论 -
常见排序算法汇总(上)
排序对于任何一个程序员来说,可能都不会陌生。你学的第一个算法,可能就是排序。大部分编程语言中,也都提供了排序函数。在平常的项目中,也经常会用到排序。排序算法非常多,我们这次只总结部分常用的排序算法:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。冒泡排序冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作。.原创 2021-04-20 15:33:00 · 267 阅读 · 2 评论 -
【leetcode之旅】栈 - 155.最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。 示例:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[原创 2021-04-19 22:15:29 · 146 阅读 · 0 评论 -
【leetcode之旅】栈 - 20.有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-parentheses著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。...原创 2021-04-18 22:16:02 · 185 阅读 · 0 评论 -
【leetcode之旅】字符串 - 415. 字符串相加
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。提示:num1 和num2 的长度都小于 5100num1 和num2 都只包含数字 0-9num1 和num2 都不包含任何前导零你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式题目解析:给定两个非负整数的字符串num1和num2,计算它们的和,不能将字符串转化为数字再进行计算。解题思路:我们可以使用常规暴力方法,从最后开始遍历字符,定义一个进位符号,当两个字符相加的数据超过10原创 2021-03-26 14:05:27 · 199 阅读 · 1 评论 -
【leetcode之旅】字符串 - 387. 字符串中的第一个唯一字符
s = "leetcode"返回 0s = "loveleetcode"返回 2原创 2021-03-25 08:44:15 · 172 阅读 · 0 评论 -
【leetcode之旅】 数组 - 724.寻找数组的中心索引
给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。示例 1:输入: nums = [1, 7, 3, 6, 5, 6]输出: 3解释: 索引3 (nu...原创 2018-10-12 15:11:26 · 237 阅读 · 0 评论 -
【leetcode之旅】 数组 - 665.非递减数列
给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n),满足 array[i] <= array[i + 1]。示例 1:输入: [4,2,3]输出: True解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。示...原创 2018-09-18 20:14:12 · 572 阅读 · 0 评论 -
【leetcode之旅】 数组 - 643.子数组最大平均数 I
给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。示例 1:输入: [1,12,-5,-6,50,3], k = 4输出: 12.75解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75 注意:1 <= k <= n <= 30,000。 所给数据范围 [-10,000,10,000]。解答:...原创 2018-09-06 22:43:10 · 238 阅读 · 0 评论 -
【leetcode之旅】 数组 - 605.种花问题
假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。示例 1:输入: flowerbed = [1,0,0,0,1], n = 1输出...原创 2018-09-06 22:33:27 · 343 阅读 · 0 评论 -
【leetcode之旅】 数组 - 581.最短无序连续子数组
给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。说明 :输入的数组长度范围在 [1, 10,000]。...原创 2018-09-06 22:30:37 · 399 阅读 · 0 评论 -
【leetcode之旅】 数组 - 566.重塑矩阵
在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。示例 1:输入:...原创 2018-09-05 23:02:18 · 348 阅读 · 0 评论 -
【leetcode之旅】 数组 - 674.最长连续递增序列
给定一个未经排序的整数数组,找到最长且连续的的递增序列。示例 1:输入: [1,3,5,4,7]输出: 3解释: 最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为5和7在原数组里被4隔开。 示例 2:输入: [2,2,2,2,2]输出: 1解释: 最长连续递增序列是 [2], 长度为1。注意:数...原创 2018-09-18 20:17:07 · 454 阅读 · 0 评论 -
【leetcode之旅】 数组 - 561.数组拆分I
给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。示例 1:输入: [1,4,3,2]输出: 4解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4).提示:n 是正整数,范围在 [1, 10000...原创 2018-09-05 22:59:07 · 743 阅读 · 0 评论 -
【leetcode之旅】 数组 - 532.数组中的K-diff数对
给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff 数对。这里将 k-diff 数对定义为一个整数对 (i, j), 其中 i 和 j 都是数组中的数字,且两数之差的绝对值是 k.示例 1:输入: [3, 1, 4, 1, 5], k = 2输出: 2解释: 数组中有两个 2-diff 数对, (1, 3) 和 (3, 5)。尽管数组中有两个1,但我们只应返回...原创 2018-09-05 22:10:57 · 352 阅读 · 0 评论 -
【leetcode之旅】 数组 - 283.移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。解答:/** * 方法一:一边移动,一边赋值 * 思路:给定一个索引index用于纪录移动后0的位置 * 首先从前面遍历,如果为0,整...原创 2018-09-03 14:25:32 · 264 阅读 · 0 评论 -
【leetcode之旅】 数组 - 268.缺少数字
给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。示例 1:输入: [3,0,1]输出: 2示例 2:输入: [9,6,4,2,3,5,7,0,1]输出: 8说明:你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?解答:/** * * @param nums * @ret...原创 2018-09-03 11:44:23 · 277 阅读 · 0 评论 -
【leetcode之旅】 数组 - 485.最大连续1的个数
给定一个二进制数组, 计算其中最大连续1的个数。示例 1:输入: [1,1,0,1,1,1]输出: 3解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.注意:输入的数组只包含 0 和1。 输入数组的长度是正整数,且不超过 10,000。解答:/** * 思路: * for循环遍历,判断是否为1,如果为1,count++ * 否则令coun...原创 2018-09-04 21:28:13 · 229 阅读 · 0 评论 -
【leetcode之旅】 数组 - 448.找出所有数组消失的数
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]解答:/...原创 2018-09-04 21:25:11 · 294 阅读 · 0 评论 -
【leetcode之旅】 数组 - 414.第三大的数
给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。示例 1:输入: [3, 2, 1]输出: 1解释: 第三大的数是 1.示例 2:输入: [1, 2]输出: 2解释: 第三大的数不存在, 所以返回最大的数 2 .示例 3:输入: [2, 2, 3, 1]输出: 1解释: 注意,要...原创 2018-09-04 21:19:48 · 437 阅读 · 0 评论 -
【leetcode之旅】 数组 - 122.买卖股票的最佳时机II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔...原创 2018-08-29 09:46:10 · 539 阅读 · 0 评论 -
【leetcode之旅】 数组 - 121. 买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 ...原创 2018-08-29 09:13:38 · 274 阅读 · 0 评论 -
【leetcode之旅】 数组 - 746.使用最小花费爬楼梯
数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例 1:输入: cost = [10, 15, 20]输出: 15解释: 最低花费是从c...原创 2018-10-12 15:15:28 · 343 阅读 · 0 评论 -
【leetcode之旅】 数组 - 747.至少是其他数字两倍的最大数
在一个给定的数组nums中,总是存在一个最大元素 。查找数组中的最大元素是否至少是数组中每个其他数字的两倍。如果是,则返回最大元素的索引,否则返回-1。示例 1:输入: nums = [3, 6, 1, 0]输出: 1解释: 6是最大的整数, 对于数组中的其他整数,6大于数组中其他元素的两倍。6的索引是1, 所以我们返回1.示例 2:输入: nums = [1,...原创 2018-10-12 15:19:27 · 311 阅读 · 0 评论 -
【安全】什么是Base64算法?
转载自&nbsp;玻璃猫 程序员小灰&nbsp;Value Char &nbsp; Value Char &nbsp; Value Char &nbsp; Value Char 0 A 16 Q 32 g 48转载 2018-11-28 17:39:59 · 411 阅读 · 0 评论 -
【leetcode之旅】字符串 - 383.赎金信
给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成,返回 true ;否则返回 false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。)注意:你可以假设两个字符串均只含有小写字母。canConstruct("a", "...原创 2018-11-26 17:56:25 · 332 阅读 · 0 评论 -
【leetcode之旅】字符串 - 345.反转字符串中的元音字母
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。示例 1:输入: "hello"输出: "holle"示例 2:输入: "leetcode"输出: "leotcede"说明:元音字母不包含字母"y"。 /** * 反转 * @param s * @return */public static String reverseVowels(S...原创 2018-11-26 17:54:07 · 246 阅读 · 0 评论 -
【leetcode之旅】 数组 - 724.寻找数组的中心索引
给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。示例 1:输入: nums = [1, 7, 3, 6, 5, 6]输出: 3解释: 索引3 (nu...原创 2018-10-08 20:27:14 · 279 阅读 · 0 评论 -
【leetcode之旅】 数组 - 717.1比特与2比特字符
有两种特殊字符。第一种字符可以用一比特0来表示。第二种字符可以用两比特(10 或 11)来表示。现给一个由若干比特组成的字符串。问最后一个字符是否必定为一个一比特字符。给定的字符串总是由0结束。示例 1:输入: bits = [1, 0, 0]输出: True解释: 唯一的编码方式是一个两比特字符和一个一比特字符。所以最后一个字符是一比特字符。示例 2:输入: ...原创 2018-10-08 20:24:46 · 311 阅读 · 0 评论 -
【leetcode之旅】 数组 - 关于数组【简单】部分的总结
通过这么久的坚持,终于把数组中的【简单】部分的题目做完了,做了这么多,也该来一次小小的总结。通过数组的练习,了解了这一类题的常用思路和方法1.使用多重循环一步步遍历求解2.将数组存入Map中,然后利用map中的方法进行解答3.双指针法,定义两个索引,对数组进行遍历4.有时从头往后遍历不能解决问题,那么可以尝试从后往前进行遍历5.在【66.加一问题】中将每位数通过相除(/)判...原创 2018-10-15 11:43:19 · 1296 阅读 · 26 评论 -
【漫画算法系列】漫画说算法--动态规划算法一
题目: 有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。要求用程序来求出一共有多少种走法。 比如,每次走1级台阶,一共走10步,这是其中一种走法。我们可以简写成 1,1,1,1,1,1,1,1,1,1。再比如,每次走2级台阶,一共走5步,这是另一种走法。我们可以简写成 2,2,2,2,2。...转载 2018-10-18 10:16:44 · 4695 阅读 · 0 评论 -
【leetcode之旅】 数组 - 697.数组的度
给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。示例 1:输入: [1, 2, 2, 3, 1]输出: 2解释: 输入数组的度是2,因为元素1和2的出现频数最大,均为2.连续子数组里面拥有相同度的有如下所示:[1, 2, 2, 3, 1], [1, ...原创 2018-10-07 22:04:01 · 514 阅读 · 0 评论 -
【leetcode之旅】 数组 - 914.卡牌分组
给定一副牌,每张牌上都写着一个整数。此时,你需要选定一个数字X,使我们可以将整副牌按下述规则分成 1 组或更多组:每组都有X张牌。 组内所有的牌上都写着相同的整数。仅当你可选的X >= 2时返回true。示例 1:输入:[1,2,3,4,4,3,2,1]输出:true解释:可行的分组是 [1,1],[2,2],[3,3],[4,4]示例 2:...原创 2018-10-15 08:31:08 · 1587 阅读 · 3 评论 -
【leetcode之旅】 数组 - 905.按奇偶校验排序数组
给定一个非负整数数组 A,返回一个由 A 的所有偶数元素组成的数组,后面跟 A 的所有奇数元素。你可以返回满足此条件的任何数组作为答案。示例:输入:[3,1,2,4]输出:[2,4,3,1]输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。提示:1 <= A.length <= 5000 0 <= A[i] <=...原创 2018-10-12 15:48:11 · 229 阅读 · 0 评论 -
【leetcode之旅】 数组 - 896.单调数列
如果数组是单调递增或单调递减的,那么它是单调的。如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= j,A[i]> = A[j],那么数组 A 是单调递减的。当给定的数组 A 是单调数组时返回 true,否则返回 false。示例 1:输入:[1,2,2,3]输出:true示例 2:输入...原创 2018-10-12 15:43:26 · 510 阅读 · 0 评论 -
【leetcode之旅】 数组 - 888.公平的糖果交换
爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 块糖的大小,B[j] 是鲍勃拥有的第 j 块糖的大小。因为他们是朋友,所以他们想交换一个糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交换的糖果棒的大小。如果有多个...原创 2018-10-12 15:39:22 · 346 阅读 · 0 评论 -
【leetcode之旅】 数组 - 695.岛屿的最大面积
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,...原创 2018-10-07 22:02:19 · 363 阅读 · 0 评论 -
【leetcode之旅】 数组 - 849.到最近的人的最大距离
在一排座位( seats)中,1 代表有人坐在座位上,0 代表座位上是空的。至少有一个空座位,且至少有一人坐在座位上。亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。返回他到离他最近的人的最大距离。示例 1:输入:[1,0,0,0,1,0,1]输出:2解释:如果亚历克斯坐在第二个空位(seats[2])上,他到离他最近的人的距离为 2 。如果亚...原创 2018-10-12 15:33:25 · 303 阅读 · 0 评论 -
【leetcode之旅】 数组 - 830.较大分组的位置
在一个由小写字母构成的字符串 S 中,包含由一些连续的相同字符所构成的分组。例如,在字符串 S = "abbxxxxzyy" 中,就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。我们称所有包含大于或等于三个连续字符的分组为较大分组。找到每一个较大分组的起始和终止位置。最终结果按照字典顺序输出。示例 1:输入: "abbxx原创 2018-10-12 15:25:18 · 251 阅读 · 0 评论