
数据结构和算法
lone-
这个作者很懒,什么都没留下…
展开
-
LeetCode814. 二叉树剪枝
我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”:B.length >= 3存在 0 < i < B.length - 1 使得 B[0] < B[1] < … B[i-1] < B[i] > B[i+1] > … > B[B.length - 1](注意:B 可以是 A 的任意子数组,包括整个数组 A。)给出一个整数数组 A,返回最长 “山脉” 的长度。如果不含有 “山脉” 则返回 0。示例 1:输入:[2,1,4,7.原创 2020-12-14 18:52:35 · 203 阅读 · 0 评论 -
归并排序and逆序对
归并:利用分治思想,对数组进行二分分割一直分到每部分剩下一个元素,然后左右合并合并的时候利用一个临时数组比较方便static void mergeSort(int[]ar,int l,int r) { if(l>=r) return; int mid=(l+r)/2; mergeSort(ar,l,mid); mergeSort(ar,mid+1,r); int[] temp=new int[r-l+1]; int index=0,begin=l,end.原创 2020-10-30 14:41:43 · 163 阅读 · 0 评论 -
LeetCode845. 数组中的最长山脉
我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”:B.length >= 3存在 0 < i < B.length - 1 使得 B[0] < B[1] < … B[i-1] < B[i] > B[i+1] > … > B[B.length - 1](注意:B 可以是 A 的任意子数组,包括整个数组 A。)给出一个整数数组 A,返回最长 “山脉” 的长度。如果不含有 “山脉” 则返回 0。示例 1:输入:[2,1,4,7.原创 2020-10-25 21:39:01 · 147 阅读 · 0 评论 -
二分查找
基本二分:public int search(int[] nums, int target) { int l=0; int r=nums.length-1; while(l<=r) { int mid=l+(r-l)/2; if(nums[mid]==target) return mid; else if(nums[mid]>t原创 2020-10-14 22:10:26 · 124 阅读 · 0 评论 -
LeetCode75. 颜色分类每日一题
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sort-colors著作权归领扣网络所有。商业转载请联系官方授权,非商业.原创 2020-10-07 11:09:35 · 143 阅读 · 0 评论 -
Java中>>与>>>的区别
>>与>>>都属于位运算符,两者区别为 : 右移时,所填充的高位不同>>右移时用符号位填充高位 符号位:正数符号位为0; 负数符号位为1>>>右移用0填充高位<<左移低位补0没有<<<...原创 2020-10-05 21:45:13 · 193 阅读 · 0 评论 -
公倍数公约数
最大公约数:辗转相除法 static int gcd(int a,int b) { return b==0?a:gcd(b,a%b); }最小公倍数:(a*b)/gcd(a,b);原创 2020-10-04 17:53:15 · 94 阅读 · 0 评论 -
LeetCode538. 把二叉搜索树转换为累加树(每日一题)
把二叉搜索树转换为累加树给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。例如:输入: 原始二叉搜索树:5/ 2 13输出: 转换为累加树:18/ 20 13来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/convert-bst-to-greater-tree著作权归领扣网络所有。商业转载请.原创 2020-09-21 11:06:39 · 91 阅读 · 0 评论 -
LeetCode902. 最大为 N 的数字组合
我们有一组排序的数字 D,它是 {‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’} 的非空子集。(请注意,‘0’ 不包括在内。)现在,我们用这些数字进行组合写数字,想用多少次就用多少次。例如 D = {‘1’,‘3’,‘5’},我们可以写出像 ‘13’, ‘551’, ‘1351315’ 这样的数字。返回可以用 D 中的数字写出的小于或等于 N 的正整数的数目。示例 1:输入:D = [“1”,“3”,“5”,“7”], N = 100输出:20解释:可写出的 20.原创 2020-09-18 18:10:52 · 256 阅读 · 0 评论 -
LeetCode581. 最短无序连续子数组
给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。说明 :输入的数组长度范围在 [1, 10,000]。输入的数组可能包含重复元素 ,所以升序的意思是<=。来源:力扣(LeetCode)链接:https://leet.原创 2020-09-17 12:05:58 · 82 阅读 · 0 评论 -
LeecCode94. 二叉树的中序遍历
给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。迭代:利用栈,先将头结点入栈,遍历其左子树入栈,在操作右字数/** * Definition.原创 2020-09-14 10:51:35 · 124 阅读 · 0 评论 -
LeetCode1514. 概率最大的路径
给你一个由 n 个节点(下标从 0 开始)组成的无向加权图,该图由一个描述边的列表组成,其中 edges[i] = [a, b] 表示连接节点 a 和 b 的一条无向边,且该边遍历成功的概率为 succProb[i] 。指定两个节点分别作为起点 start 和终点 end ,请你找出从起点到终点成功概率最大的路径,并返回其成功概率。如果不存在从 start 到 end 的路径,请 返回 0 。只要答案与标准答案的误差不超过 1e-5 ,就会被视作正确答案。来源:力扣(LeetCode)链接:htt.原创 2020-09-11 17:10:49 · 310 阅读 · 0 评论 -
LeetCode 347. 前 K 个高频元素
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。你可以按任意顺序返回答案。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/top-k-frequent-elements著作权归领扣网络所有。商业转载.原创 2020-09-07 19:42:43 · 116 阅读 · 0 评论 -
LeetCode 459. 重复的子字符串
原题:给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。示例 1:输入: “abab”输出: True解释: 可由子字符串 “ab” 重复两次构成。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/repeated-substring-pattern著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路:每次从0开始去取长度为1.2.3…直到末尾.原创 2020-08-24 15:35:27 · 144 阅读 · 0 评论 -
LeetCode133. 克隆图
题目:给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。原题链接:https://leetcode-cn.com/problems/clone-graph/思路:dfs因为是图,一个节点可能被访问多次,所以在每个节点第一次访问克隆时,以原节点为key,克隆节点为value放入map中,以便以以后访问节点时返回class Solution { public Node cloneG.原创 2020-08-12 12:45:31 · 120 阅读 · 0 评论 -
LeetCode1513. 仅含 1 的子串数
题目:1513. 仅含 1 的子串数给你一个二进制字符串 s(仅由 ‘0’ 和 ‘1’ 组成的字符串)。返回所有字符都为 1 的子字符串的数目。由于答案可能很大,请你将它对 10^9 + 7 取模后返回。原题链接:https://leetcode-cn.com/problems/number-of-substrings-with-only-1s/思路:动态规划字符串"11"和"111"的子串分别是:“11” “111” 1 .原创 2020-07-31 13:15:55 · 451 阅读 · 0 评论 -
LeetCode15. 三数之和
题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。原题链接:https://leetcode-cn.com/problems/3sum思路:排序+指针遍历排序后的数组,声明两指针L=i+1,R=length-1相加的和小于0 L就往后走,大于0 R就往后走需要注意每次指针的移动都要进行去重class Solution { .原创 2020-07-17 21:12:40 · 82 阅读 · 0 评论 -
LeetCode44. 通配符匹配
给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘’ 的通配符匹配。‘?’ 可以匹配任何单个字符。'’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。原题链接:https://leetcode-cn.com/problems/wildcard-matching/思路:dfs,与LeetCode10. 正则表达式匹配 类似,.原创 2020-07-05 11:29:43 · 221 阅读 · 0 评论 -
LeetCode10. 正则表达式匹配
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘’ 的正则表达式匹配。‘.’ 匹配任意单个字符'’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。原题链接:https://leetcode-cn.com/problems/regular-expression-matching/思路:dfs搜索,对*进.原创 2020-07-02 22:38:56 · 114 阅读 · 0 评论 -
题目 1531: [蓝桥杯][算法提高VIP]数的划分
问题描述:一个正整数可以划分为多个正整数的和,比如n=3时:3;1+2;1+1+1;共有三种划分方法。给出一个正整数,问有多少种划分方法。数据规模和约定n< =100原题链接:https://www.dotcpp.com/oj/problem1531.html思路:dp:比如求n得划分就是:n-1的划分+1;n-2的划分+1…2;n-3的划分+1……3;……;n-n的划分+n……1特别注意:循环颠倒的话就会出现,2 1这种结果一样顺序不一样的结果import ..原创 2020-07-02 18:17:31 · 373 阅读 · 0 评论 -
LeetCode37.解数独
思路:暴力搜索,对于没有树的格子进行1-9的搜索,若是当前格子1-9都不满足就进行回溯原题链接https://leetcode-cn.com/problems/sudoku-solver/class Solution { public void solveSudoku(char[][] board) { for (int i = 0; i < board.length; i++) { for (int j = 0; j < board.le.原创 2020-06-21 20:28:39 · 139 阅读 · 0 评论