算法
czZ__czZ
快速走路的程序猿
展开
-
算法-路径总和
路径总和给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。解法一、递归求和public boolean hasPathSum = false; public boolean hasPathSum(TreeNode root, int targetSum) { int sum原创 2021-12-29 14:19:43 · 184 阅读 · 0 评论 -
算法-翻转二叉树
翻转二叉树每个翻转一下就行了 public TreeNode invertTree(TreeNode root) { if(root ==null){ return null; } TreeNode temp = root.left; root.left = root.right; root.right = temp; invertTree(root.left);原创 2021-12-28 17:24:10 · 300 阅读 · 0 评论 -
给定一个二叉树,检查它是否是镜像对称的
对称二叉树之前我们使用最大深度遍历,遍历了所有的横向的选项,在对比对称的时候思路和算法如果一个树的左子树与右子树镜像对称,那么这个树是对称的。因此,该问题可以转化为:两个树在什么情况下互为镜像?如果同时满足下面的条件,两个树互为镜像:它们的两个根结点具有相同的值每个树的右子树都与另一个树的左子树镜像对称所以很简单的递归,条件就是只要两颗树左右节点相同即可class Solution { public boolean isSymmetric(TreeNode roo原创 2021-12-28 15:51:19 · 607 阅读 · 0 评论 -
算法-二叉树的前中后序遍历
题目一、二叉树的前序遍历给你二叉树的根节点root,返回它节点值的前序遍历 --letcode解法一、迭代巧妙使用双向队列的先进先出规则,挨个查左节点 public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int v...原创 2021-12-21 18:38:36 · 73 阅读 · 0 评论 -
算法-. 二叉树的层序遍历、最大深度
\z给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。二叉树的层序遍历首先什么是层序遍历层序遍历?看这一篇就够了!_BNDSllx的博客-CSDN博客_层序遍历BFS 的使用场景总结:层序遍历、最短路径问题---力扣如果我们使用 DFS/BFS 只是为了遍历一棵树、一张图上的所有结点的话,那么 DFS 和 BFS 的能力没什么差别,我们当然更倾向于更方便写、空间复杂度更低的 DFS 遍历。不过,某些使用场景是 DFS 做不到的,只能使用 BFS 遍...原创 2021-12-22 15:15:01 · 448 阅读 · 0 评论 -
合并两个有序数组
给你两个按 非递减顺序 排列的整数数组nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n来源:力扣(LeetCode)一、最初..原创 2021-12-07 13:41:00 · 628 阅读 · 0 评论 -
两个数组交集
给你两个整数数组nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。来源:力扣(LeetCode)一、个人暴力破解空间复杂度蛮高的,,,, public int[] intersect(int[] nums1, int[] nums2) { List<Integer> list = new ArrayList<..原创 2021-12-08 11:10:57 · 180 阅读 · 0 评论 -
算法合并两个有序链表、移除链表元素
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。--leetcode合并两个有序链表一、定义一个新的节点,然后循环两个链表,依次往后链 public ListNode mergeTwoLists(ListNode list1, ListNode list2) { ListNode newNode = new ListNode(); ListNode newNodeTemp = newNode; w...原创 2021-12-16 10:25:39 · 913 阅读 · 0 评论 -
算法-矩阵置零
给定一个mxn的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设为0。请使用原地算法(leetcode)https://leetcode-cn.com/problems/set-matrix-zeroes/解法一:暴力破解时间复杂度:O(mn)空间复杂度:O(m+n)其实目的就是统计哪几行哪几列的元素需要归0class Solution { public void setZeroes(int[][] matrix) { int n =...原创 2021-12-13 17:30:35 · 282 阅读 · 0 评论 -
算法--买卖基金的时机
给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0来源:力扣(LeetCode)使用了暴力解法,双重循环直接超时了哈哈,使用dp思想我们来假设自己来购买股票。随着时间的推移,每天我们都可以选择出售股票与否。那么,假设在第 i 天,如果我们要在...原创 2021-12-08 18:26:37 · 169 阅读 · 0 评论 -
算法-杨辉三角返回
题目:给定一个非负整数numRows,生成「杨辉三角」的前numRows行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。转自leetcode杨辉三角的三角有一个特点,就是低位的结果已知,求高位的某些数,分析思路跟动态规划差不多,就是循环从低位已知方法计算,然后高位找规律添加数据 public List<List<Integer>> generate(int numRows) { List<List<Integer>...原创 2021-12-09 16:41:01 · 85 阅读 · 0 评论 -
算法-赎金信,计数模拟+有效的字母异位词
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。来源:力扣(LeetCode)一、设计字符串的计数可以使用hash来统计因为创建了hash,有了额外的空间和时间开销public boolean canConstruct(String ransomNote, String .原创 2021-12-14 14:37:31 · 323 阅读 · 0 评论 -
算法-环形链表的判断
给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。来源:力扣(LeetCode)环形链表pos是内部的处理,不用关注解法一、一原创 2021-12-14 16:38:58 · 109 阅读 · 0 评论 -
算法-重塑矩阵
在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。给你一个由二维数组 mat 表示的m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。来源:力扣(LeetCode)一、老老实实一个一个双...原创 2021-12-09 15:15:30 · 214 阅读 · 0 评论 -
算法-反转链表
给你单链表的头节点head,请你反转链表,并返回反转后的链表。反转链表--leetcode解法一:递归public ListNode reverseList(ListNode head) { ListNode prev = null; ListNode curr = head; while(curr !=null){ ListNode temp = curr.next; curr.next ..原创 2021-12-17 11:24:26 · 703 阅读 · 0 评论 -
算法-字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。--leetcode在评论里看到一句话叫做,碰到计数,要么hash要么桶一、hash计数key代表字符串,value代表对应出现的次数 public int firstUniqChar(String s) { HashMap<Character, Integer> hashMap = new HashMap<>(); for(int i=0原创 2021-12-14 10:44:13 · 337 阅读 · 0 评论 -
数据结构(LeetCode)-两数之和
给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。一、暴力破解:双循环,时间复杂度在O(n2),很复杂class Solution { public int[] twoSum(int[] nums, int target) { int[] index = new i...原创 2021-12-07 10:17:26 · 130 阅读 · 0 评论 -
算法-有效的括号计算
有效的括号给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。来源:力扣(LeetCode接触队列类的算法:首先弄明白Queue、Deque和LinkedList的区别算法中主要用到了lisnklist的队列特性【Java集合框架】Queue、Deque和LinkedList的区别_Awt_FuDongLai的博客-CSDN博客_deque和lin.原创 2021-12-20 10:57:37 · 530 阅读 · 0 评论