![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
weixin_39137699
阳光,热情,幽默
展开
-
leetcod212hard单词搜搜II回溯
给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。示例:输入:words = [“oath”,“pea”,“eat”,“rain”] and board =[[‘o’,‘a’,...原创 2020-02-27 14:12:58 · 283 阅读 · 0 评论 -
leetcode 60 第k个排列
给出集合[1,2,3,…,n],其所有元素共有n! 种排列。按大小顺序列出所有排列情况,并一一标记,当n = 3 时, 所有排列如下:"123""132""213""231""312""321"给定n 和k,返回第k个排列。说明:给定 n的范围是 [1, 9]。给定 k的范围是[1, n!]。示例1:输入: n = 3, k = 3输出:...原创 2020-02-18 12:44:06 · 88 阅读 · 0 评论 -
leetcode32最长有效括号hard最特殊一种解法
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”示例 2:输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”思路: 原本这是一道应该用动态规划解的,但是出现了一种神奇的解法,特此记录一下。class Solution { public i...原创 2020-02-13 16:10:15 · 102 阅读 · 0 评论 -
递归备忘录法-leetcode 72编辑距离
给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入: word1 = “horse”, word2 = “ros”输出: 3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘...原创 2020-02-12 15:35:56 · 206 阅读 · 0 评论 -
并查集应用-leetcode547朋友圈
班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数。示例 ...原创 2020-02-07 23:01:41 · 87 阅读 · 0 评论 -
并查集应用-leetcode200岛屿数量
给定一个由'1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出:1示例2:输入:11000110000010000011输出: 3思路:并查集class Solution...原创 2020-02-07 22:46:40 · 156 阅读 · 0 评论 -
leetcode 227基本计算器II
实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。示例 1:输入: “3+2*2”输出: 7示例 2:输入: " 3/2 "输出: 1示例 3:输入: " 3+5 / 2 "输出: 5说明:你可以假设所给定的表达式都是有效的。请不要使用内置的库函数 eval。思路: 用2...原创 2020-02-02 16:08:23 · 123 阅读 · 0 评论 -
leetcode307 区域和检索-数组可修改
给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。update(i, val) 函数可以通过将下标为 i 的数值更新为 val,从而对数列进行修改。示例:Given nums = [1, 3, 5]sumRange(0, 2) -> 9update(1, 2)sumRange(0, 2) -> 8说明:...原创 2020-02-02 14:51:03 · 125 阅读 · 0 评论 -
leetcode 870优势洗牌
给定两个大小相等的数组A和B,A 相对于 B 的优势可以用满足A[i] > B[i]的索引 i的数目来描述。返回A的任意排列,使其相对于 B的优势最大化。示例 1:输入:A = [2,7,11,15], B = [1,10,4,11]输出:[2,11,7,15]示例 2:输入:A = [12,24,8,32], B = [13,25,32,11]...原创 2020-02-01 14:41:33 · 126 阅读 · 0 评论 -
leetcode738 单调递增的数字
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)示例 1:输入: N = 10输出: 9示例 2:输入: N = 1234输出: 1234示例 3:输入: N = 332输出: 299说明: N 是在 [0, 10^...原创 2020-01-31 21:33:44 · 125 阅读 · 0 评论 -
leetcode416分割等和子集
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集....原创 2020-01-31 20:16:59 · 208 阅读 · 0 评论 -
leetcode986 区间列表的交集
给定两个由一些闭区间组成的列表,每个区间列表都是成对不相交的,并且已经排序。返回这两个区间列表的交集。(形式上,闭区间 [a, b](其中 a <= b)表示实数 x 的集合,而 a <= x <= b。两个闭区间的交集是一组实数,要么为空集,要么为闭区间。例如,[1, 3] 和 [2, 4] 的交集为 [2, 3]。)示例:输入:A = [[0,2],[5,10],[...原创 2020-01-31 20:13:36 · 114 阅读 · 0 评论 -
bitmap用法字符隐射 leetcode 318 最大单词长度乘积
给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。示例 1:输入: [“abcw”,“baz”,“foo”,“bar”,“xtfn”,“abcdef”]输出: 16解释: 这两个单词为 “abcw”, “xtfn”。示例 2...原创 2020-01-30 16:16:59 · 172 阅读 · 0 评论 -
leetcode801 使序列递增的最小交换次数
我们有两个长度相等且不为空的整型数组 A 和 B 。我们可以交换 A[i] 和 B[i] 的元素。注意这两个元素在各自的序列中应该处于相同的位置。在交换过一些元素之后,数组 A 和 B 都应该是严格递增的(数组严格递增的条件仅为A[0] < A[1] < A[2] < … < A[A.length - 1])。给定数组 A 和 B ,请返回使得两个数组均保持严格递增状...原创 2020-01-29 22:02:54 · 202 阅读 · 0 评论 -
leetcode 1019 链表中的下一个更大节点
给出一个以头节点head作为第一个节点的链表。链表中的节点分别编号为:node_1, node_2, node_3, ... 。每个节点都可能有下一个更大值(next larger value):对于node_i,如果其next_larger(node_i)是node_j.val,那么就有j > i且node_j.val > node_i.val,而j是可能...原创 2020-01-29 11:54:57 · 468 阅读 · 0 评论 -
摩尔投票法
背景: leetcode 169题求一个数组中,出现次数大于 n/2;的元素如果在一个遍历中解决这个问题??答案就是摩尔投票法。摩尔投票法:用一个计数器,每次当计数器为0时,以当前遍历元素为起点遍历,当往下遍历时,相同元素计数加1,元素不同计数器减1。那么最后剩下的元素为出现次数大于n/2。eg: [2222221111]; public int majorityElement(in...原创 2020-01-28 17:14:34 · 86 阅读 · 0 评论 -
leetcode 474一和零
在计算机界中,我们总是追求用有限的资源获取最大的收益。现在,假设你分别支配着 m 个0和 n 个1。另外,还有一个仅包含0和1字符串的数组。你的任务是使用给定的m 个0和 n 个1,找到能拼出存在于数组中的字符串的最大数量。每个0和1至多被使用一次。注意:给定0和1的数量都不会超过100。给定字符串数组的长度不会超过600。示例 1:...原创 2020-01-28 15:15:32 · 138 阅读 · 0 评论 -
leetcode 916 单词子集
我们给出两个单词数组 A和B。每个单词都是一串小写字母。现在,如果b 中的每个字母都出现在 a 中,包括重复出现的字母,那么称单词 b 是单词 a 的子集。 例如,“wrr” 是 “warrior” 的子集,但不是 “world” 的子集。如果对 B 中的每一个单词b,b 都是 a 的子集,那么我们称A 中的单词 a 是通用的。你可以按任意顺序以列表形式返回A 中所有的通用...原创 2020-01-27 21:35:02 · 127 阅读 · 0 评论 -
leetcode974 和可被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 <...原创 2020-01-27 17:24:49 · 161 阅读 · 0 评论 -
leetcode433 最小基因变化-bfs
一条基因序列由一个带有8个字符的字符串表示,其中每个字符都属于 “A”, “C”, “G”, "T"中的任意一个。假设我们要调查一个基因序列的变化。一次基因变化意味着这个基因序列中的一个字符发生了变化。例如,基因序列由"AACCGGTT" 变化至 “AACCGGTA” 即发生了一次基因变化。与此同时,每一次基因变化的结果,都需要是一个合法的基因串,即该结果属于一个基因库。现在给定3个参数 ...原创 2020-01-27 12:53:27 · 168 阅读 · 0 评论 -
leetcode 593 有效的正方形
给定二维空间中四点的坐标,返回四点是否可以构造一个正方形。一个点的坐标(x,y)由一个有两个整数的整数数组表示。示例:输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]输出: True思路,判断四条边相等,再对角线相等。必须先排序一遍。class Solution { public boolean validS...原创 2020-01-26 18:15:59 · 87 阅读 · 0 评论 -
leetcode 421 数组中的两个数的最大异或值
给定一个非空数组,数组中元素为 a0, a1, a2, … , an-1,其中 0 ≤ ai < 231。找到 ai 和aj最大的异或 (XOR) 运算结果,其中0 ≤ i,j < n。你能在O(n)的时间解决这个问题吗?示例:输入: [3, 10, 5, 25, 2, 8]输出: 28解释: 最大的结果是 5 ^ 25 = 28.这题挺别开生面的...原创 2020-01-24 18:13:32 · 120 阅读 · 0 评论 -
leetcode 714 买卖股票的最佳时机含手续费
给定一个整数数组prices,其中第i个元素代表了第i天的股票价格 ;非负整数fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每次交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。示例 1:输入: prices = [1, 3, 2, 8, 4, 9], fee = 2输出: 8解释: 能够达到...原创 2020-01-24 18:02:35 · 99 阅读 · 0 评论 -
leetcode 393 UTF-8编码验证
UTF-8 中的一个字符可能的长度为 1 到 4 字节,遵循以下的规则:对于 1 字节的字符,字节的第一位设为0,后面7位为这个符号的unicode码。对于 n 字节的字符 (n > 1),第一个字节的前 n 位都设为1,第 n+1 位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。这是 UTF-8 编码的工作方式:Char. num...原创 2020-01-23 23:01:29 · 153 阅读 · 0 评论 -
leetcode 456 132模式
给定一个整数序列:a1, a2, ..., an,一个132模式的子序列ai, aj, ak被定义为:当 i < j < k 时,ai < ak < aj。设计一个算法,当给定有n 个数字的序列时,验证这个序列中是否含有132模式的子序列。注意:n 的值小于15000。示例1:输入: [1, 2, 3, 4]输出: False解释: 序列中不存在1...原创 2020-01-23 17:59:41 · 152 阅读 · 0 评论 -
leetcode 678有效的括号字符串
给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:任何左括号 ( 必须有相应的右括号 )。任何右括号 ) 必须有相应的左括号 ( 。左括号 ( 必须在对应的右括号之前 )。可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。一个空字符串也被视为有效字符串。示例 1:输入: “()”输出: True...原创 2020-01-22 12:28:52 · 226 阅读 · 0 评论 -
leetcode 147 对链表进行插入排序
对链表进行插入排序:插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。思路: 链表的插入排序,不能像数组类的插入排序,由后往前找,所以,只能从前往后找。所以这里就当时疑惑。所以就得从前往后,但是为了避免从大部分...原创 2020-01-19 21:21:33 · 98 阅读 · 0 评论 -
leetcode 241为运算表达式设计优先级
给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。示例 1:输入: “2-1-1”输出: [0, 2]解释:((2-1)-1) = 0(2-(1-1)) = 2示例 2:输入: “23-45”输出: [-34, -14, -10, -10, 10]解释:(2*(3-(...原创 2020-01-18 16:48:19 · 192 阅读 · 0 评论 -
分治算法应用-剑指offer-逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据,...原创 2020-01-18 15:38:32 · 196 阅读 · 0 评论 -
leetcode384 打乱数组-洗牌算法
打乱一个没有重复元素的数组。示例:// 以数字集合 1, 2 和 3 初始化数组。int[] nums = {1,2,3};Solution solution = new Solution(nums);// 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。solution.shuffle();// 重设数组到它的初始状态[1,2,3]。solut...原创 2020-01-16 18:37:07 · 163 阅读 · 0 评论 -
leetcode 718 最长重复子数组
给两个整数数组A和B,返回两个数组中公共的、长度最长的子数组的长度。示例 1:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出: 3解释:长度最长的公共子数组是 [3, 2, 1]。说明:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 100思路: 判断子数组重复个数,动态...原创 2020-01-15 22:33:52 · 144 阅读 · 0 评论 -
leetcode 560 和为K的子数组
给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数k的范围是[-1e7, 1e7]。思路: 暴力的二重循环,或者基...原创 2020-01-15 16:25:30 · 98 阅读 · 0 评论 -
leetcode 796 旋转字符串
给定两个字符串, A和B。A的旋转操作就是将A 最左边的字符移动到最右边。例如, 若A = 'abcde',在移动一次之后结果就是'bcdea'。如果在若干次旋转操作之后,A能变成B,那么返回True。示例 1:输入: A = 'abcde', B = 'cdeab'输出: true示例 2:输入: A = 'abcde', B = 'abced'输出: fal...原创 2020-01-13 23:44:47 · 120 阅读 · 0 评论 -
leetcode 606 根据二叉树创建字符串
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 "()" 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例 1:输入: 二叉树: [1,2,3,4] 1 / \ 2 3 / 4 输出: "1(2(4))(3)"解释: 原本将是...原创 2020-01-13 23:27:20 · 66 阅读 · 0 评论 -
leetcode 202快乐数
编写一个算法来判断一个数是不是“快乐数”。一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。示例:输入: 19输出: true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 0...原创 2020-01-13 18:30:51 · 200 阅读 · 0 评论 -
leetCode 443 压缩字符串
给定一组字符,使用原地算法将其压缩。压缩后的长度必须始终小于或等于原数组长度。数组的每个元素应该是长度为1的字符(不是 int 整数类型)。在完成原地修改输入数组后,返回数组的新长度。进阶:你能否仅使用O(1) 空间解决问题?示例 1:输入:["a","a","b","b","c","c","c"]输出:返回6,输入数组的前6个字符应该是:["a",...原创 2020-01-13 17:47:16 · 72 阅读 · 0 评论 -
leetcode 949 给定数字能组成的最大时间
给定一个由 4 位数字组成的数组,返回可以设置的符合 24 小时制的最大时间。最小的 24 小时制时间是00:00,而最大的是23:59。从 00:00 (午夜)开始算起,过得越久,时间越大。以长度为 5 的字符串返回答案。如果不能确定有效时间,则返回空字符串。示例 1:输入:[1,2,3,4]输出:"23:41"示例 2:输入:[5,5,5,5]输出:""...原创 2020-01-10 11:44:24 · 200 阅读 · 0 评论 -
leetcode 233 数字1的个数
给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。示例:输入: 13输出: 6解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。思路: 看代码class Solution { public int countDigitOne(int n) { if (n < 1) return...原创 2020-01-09 16:11:12 · 118 阅读 · 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:输入...原创 2020-01-05 20:41:20 · 213 阅读 · 0 评论 -
leetcode 643 子数组最大平均树
给定 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]。思路:...原创 2020-01-05 16:51:41 · 58 阅读 · 0 评论