![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
常见的算法题型
我若安好那还得了
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 26. 树的子结构(判断树B是A的子树)
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / \ 4 5 / \ 1 2 给定的树 B: 4 / 1 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。 题解: public class Demo52 { public static class TreeNode { int val; TreeNode left;原创 2021-10-19 14:36:35 · 154 阅读 · 0 评论 -
二分法模板
1、二分模板I class Solution { public int findPeakElement(int[] nums) { int n=nums.length; if(nums.length==1) return 0; //判断边界 if(nums[0]>nums[1]) return 0; if(nums[n-1]>nums[n-2]) return n-1; int l=1;原创 2021-09-16 15:27:16 · 131 阅读 · 0 评论 -
1218. 最长定差子序列
给你一个整数数组 arr 和一个整数 difference,请你找出并返回 arr 中最长等差子序列的长度,该子序列中相邻元素之间的差等于 difference 。 子序列 是指在不改变其余元素顺序的情况下,通过删除一些元素或不删除任何元素而从 arr 派生出来的序列。 示例 1: 输入:arr = [1,2,3,4], difference = 1 输出:4 解释:最长的等差子序列是 [1,2,3,4]。 示例 2: 输入:arr = [1,3,5,7], difference = 1 输出:1 解释:最原创 2021-07-29 19:41:04 · 110 阅读 · 0 评论 -
27. 移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下: // nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝 int l原创 2021-07-29 19:37:43 · 56 阅读 · 0 评论 -
1104. 二叉树寻路
在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。 如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记; 而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。 给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是由途经的节点标号所组成的。 示例 1: 输入:label = 14 输出:[1,3,4,14] 示例 2: 输入:label = 26 输出:[1,2,6,1原创 2021-07-29 17:17:43 · 72 阅读 · 0 评论 -
基于java两个栈实现一个队列
总体思想:栈1负责进队,栈2负责出队,栈2中为空时,则将栈1所有元素逐个出栈,栈2逐个进栈,直到栈1为空。(用笔在纸上画个示意图更容易理解) public class TwoStackToQueue { Stack<Integer> stack1 = new Stack<>(); Stack<Integer> stack2 = new Stack<>(); public void push(int m) { //进队原创 2020-10-27 10:50:59 · 66 阅读 · 0 评论 -
关于Java从键盘输入一串数字跳不出while循环的问题
有些Java笔试题的算法题中,让自己从键盘输入不定个数的数字,而且没有给结束符标志,这是使用以下代码就会出现跳不出while循环的情况 Scanner in = new Scanner(System.in); ArrayList<Integer> list = new ArrayList<>(); while (in.hasNextInt()) { int b = in.nextInt();原创 2020-10-26 17:43:21 · 456 阅读 · 0 评论 -
基于java求两个数组的交集,双指针版
public int[] intersect(int[] nums1, int[] nums2) { Arrays.sort(nums1); Arrays.sort(nums2); int len1= nums1.length; int len2= nums2.length; int[] arr=new int[Math.min(len1, len2)]; int index1=0,index2=0,index=原创 2020-10-26 17:04:59 · 167 阅读 · 0 评论 -
基于java的冒泡排序,flag优化版
加入flag进行判断,如果上次没有发生交换,说明数组已经有序,跳出循环。 public static void bubbleSort(int[] nums) { for (int i = 0; i < nums.length - 1; i++) { boolean flag = false; for (int j = 0; j < (nums.length - 1 - i); j++) { if (n原创 2020-10-26 16:59:14 · 187 阅读 · 0 评论