![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
-星雨-
缘不知所起
展开
-
二叉树之统计二叉树中叶子节点的个数
二叉树之统计二叉树中叶子节点的个数二叉树的叶子节点是既没有左子树又没有右子树的特殊的节点,使用递归我们可以方便的计算出共有多少叶子节点。public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() { } TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode l原创 2021-07-06 16:35:07 · 2903 阅读 · 0 评论 -
算法---- 借用栈实现链表反转
算法---- 借用栈实现链表反转题目描述定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } @Override public String toString() { return val+"->"+n原创 2021-07-06 14:53:24 · 453 阅读 · 0 评论 -
算法----合并两个有序数组
算法----合并两个有序数组给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例 2:输入:nu原创 2021-07-06 12:40:15 · 157 阅读 · 0 评论 -
排 序 算 法
算法排序1 冒泡算法2 选择排序算法3 插入排序1 冒泡算法从第一个开始比较,找到最大的值,让其交换到数组的最后面,然后就第二大,第三大·····,不断比较,当前一个的值都比后一个的值小的时候,数组排序结束。时间复杂度是O(n^2)稳定性较强,因为总是相邻的两个元素在交换public class TenAlgorithm { public static void main(String[] args) { int[] a={4,5,8,9,6,2,3,5,4,58,15,9原创 2021-06-29 14:26:32 · 181 阅读 · 3 评论 -
203. 移除链表元素
203. 移除链表元素1. 题目2. 代码1. 题目给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[]2. 代码/** * Definiti原创 2021-06-05 20:10:13 · 44 阅读 · 2 评论 -
调整数组顺序使奇数位于偶数前⾯
调整数组顺序使奇数位于偶数前⾯1. 题⽬描述:2. 问题解析:3. 代码1. 题⽬描述:输⼊⼀个整数数组,实现⼀个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。2. 问题解析:我们⾸先统计奇数的个数假设为n,然后新建⼀个等⻓数组,然后通过循环判断原数组中的元素为偶数还是奇数。如果是则从数组下标0的元素开始,把该奇数添加到新数组;如果是偶数则从数组下标为n的元素开始把该偶数添加到新数组中。3. 代码原创 2021-06-01 13:40:34 · 71 阅读 · 0 评论 -
⼆维数组查找
⼆维数组查找1. 题⽬描述:2. 问题解析:3. 代码1. 题⽬描述:在⼀个⼆维数组中,每⼀⾏都按照从左到右递增的顺序排序,每⼀列都按照从上到下递增的顺序排序。请完成⼀个函数,输⼊这样的⼀个⼆维数组和⼀个整数,判断数组中是否含有该整数。2. 问题解析:这⼀道题还是比较简单的,我们需要考虑的是如何做,效率最快。这⾥有⼀种很好理解的思路:矩阵是有序的,从左下⻆来看,向上数字递减,向右数字递增,因此从左下⻆开始查找,当要查找数字比左下⻆数字⼤时,右移;要查找数字比左下⻆数字小时,上移。这样找的速度最原创 2021-05-31 21:35:48 · 193 阅读 · 0 评论 -
变态跳台阶问题
变态跳台阶问题1. 题目描述:2. 问题分析:3. 代码1. 题目描述:⼀只⻘蛙⼀次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该⻘蛙跳上⼀个n级的台阶总共有多少种跳法。2. 问题分析:假设n>=2,第⼀步有n种跳法:跳1级、跳2级、到跳n级 跳1级,剩下n-1级,则剩下跳法是f(n-1)跳2级,剩下n-2级,则剩下跳法是f(n-2)…跳n-1级,剩下1级,则剩下跳法是f(1)跳n级,剩下0级,则剩下跳法是f(0)所以在n>=2的情况下:f(n)=f(n-1)+原创 2021-05-31 21:15:12 · 55 阅读 · 0 评论 -
跳台阶问题
跳台阶问题1. 题⽬描述:2. 问题分析:2.1 正常分析法:2.2 找规律分析法:1. 题⽬描述:⼀只⻘蛙⼀次可以跳上1级台阶,也可以跳上2级。求该⻘蛙跳上⼀个n级的台阶总共有多少种跳法。2. 问题分析:2.1 正常分析法:如果两种跳法,1阶或者2阶,那么假定第⼀次跳的是⼀阶,那么剩下的是n-1个台阶,跳法是f(n-1);假定第⼀次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)由a,b假设可以得出总跳法为: f(n) = f(n-1) + f(n-2)然后通过实际的情况可以得出原创 2021-05-31 21:01:57 · 108 阅读 · 0 评论 -
删除链表的倒数第N个节点
删除链表的倒数第N个节点1. 题目2. 问题分析3. 两次遍历法4. 代码5. 复杂度分析6. ⼀次遍历法7. 代码8. 复杂度分析1. 题目Leetcode:给定⼀个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。给定⼀个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第⼆个节点后,链表变为 1->2->3->5.2. 问题分析我们注意到这个问题可以容易地简化成另⼀个问题:删除从列表开头数起的第 (L - n + 1)个结原创 2021-05-31 15:19:25 · 88 阅读 · 0 评论 -
翻转 链表
翻转链表1. 题⽬描述2. 问题分析3. 代码1. 题⽬描述剑指 offer:输⼊⼀个链表,反转链表后,输出链表的所有元素。2. 问题分析这道算法题,说直⽩点就是:如何让后⼀个节点指向前⼀个节点!在下⾯的代码中定义了⼀个next 节点,该节点主要是保存要反转到头的那个节点,防⽌链表 “断裂”。3. 代码public class ListNode { int val; ListNode next = null; ListNode(int val) { th原创 2021-05-31 13:57:54 · 45 阅读 · 0 评论 -
栈的压⼊,弹出序列
栈的压⼊,弹出序列题⽬描述:输⼊两个整数序列,第⼀个序列表示栈的压⼊顺序,请判断第⼆个序列是否为该栈的弹出顺序。假设压⼊栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压⼊顺序,序列4,5,3,2,1是该压栈序列对应的⼀个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的⻓度是相等的)【思路】借⽤⼀辅助的栈,遍历压栈顺序,先将第⼀个放⼊栈中,这⾥是1,然后判断栈顶元素是不是出栈顺序的第⼀个元素,这⾥是4,很显然1≠4,所以我们继续压栈,直到相等以后开始出原创 2021-05-30 21:56:19 · 58 阅读 · 0 评论 -
判断一个数是不是质数(素数)
判断一个数是不是质数、素数1. 概念介绍2. 代码和结果1. 概念介绍质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。0和1既不是质数也不是合数,最小的质数是2。2. 代码和结果/** * @author LanceQ * @version 1.0 * @time 2021/5/19 12:53 */public class PrimeNumberDemo { public static void main(String[]原创 2021-05-19 13:58:19 · 178 阅读 · 0 评论 -
剑指 Offer 06-----从尾到头打印链表
剑指 Offer 06-----从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000import java.util.Stack;/** * @author LanceQ * @version 1.0 * @time 2021/5/16 14:40 */public class reversePrintDemo { pub原创 2021-05-16 17:21:20 · 60 阅读 · 0 评论 -
检查符号是否成对出现
检查符号是否成对出现给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断该字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。比如 “()”、"()[]{}"、"{[]}" 都是有效字符串,而 “(]” 、"([)]" 则不是。import java.util.HashMap;import java.util.Map;import java.util.Stack;/** * @author LanceQ * @原创 2021-05-14 22:51:37 · 541 阅读 · 0 评论 -
剑指 Offer----- 03数组中重复的数字
剑指 Offer----- 03数组中重复的数字找出数组中重复的数字。在一个长度为n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 class Solution { public int findRepeatNumber(int[] nums) { int len=nums原创 2021-05-14 14:34:55 · 77 阅读 · 0 评论 -
把字符串转换成整数
把字符串转换成整数写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。转载 2021-05-12 15:17:26 · 2022 阅读 · 0 评论 -
最长回文子串
最长回文子串Leetcode: LeetCode: 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。示例 1:输入: "babad"输出: "bab"注意: "aba"也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"/** * @author LanceQ * @version 1.0 * @time 2021/5/7 13:08 * 最长回文串 */public class longestPalindro原创 2021-05-07 13:40:34 · 135 阅读 · 0 评论 -
验证回文串
验证回文串1. 验证回文串2. 相关函数1. 验证回文串LeetCode: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false/** * @author LanceQ * @version 1.0 * @time 2021/5/7 12:22原创 2021-05-07 12:53:50 · 321 阅读 · 0 评论 -
回文串
回文串11. 最长回文串1. 最长回文串LeetCode: 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如"Aa"不能当做一个回文字符串。注 意:假设字符串的长度不会超过 1010。回文串:“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。示例 1:输入:"abccccdd"输出:7解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。字符出现次数原创 2021-05-04 13:31:07 · 331 阅读 · 0 评论 -
14---最长公共前缀
14---最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = ["flower","flow","flight"]输出:"fl"示例 2:输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。import java.util.Arrays;/** * @author LanceQ * @version 1.0 * @time 2021/5/2 18:0原创 2021-05-02 20:00:41 · 46 阅读 · 0 评论 -
剑指 Offer 25-----合并两个排序的链表
剑指 Offer 25-----合并两个排序的链表1. 递归2. 迭代输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4限制:0 <= 链表长度 <= 10001. 递归/** * @author LanceQ * @version 1.0 * @time 2021/5/2 17:20 */public原创 2021-05-02 17:55:36 · 75 阅读 · 0 评论 -
剑指offer-------斐波那契数列
剑指offer-------斐波那契数列斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368……特别指出:第0项是0,第1项是第一个1。这个数列从第三项开始,每一项都等于前两项之和。题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39问题分析:可以肯定原创 2021-04-22 20:31:33 · 345 阅读 · 0 评论 -
剑指office------二维数组查找
剑指office------二维数组查找题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。问题解析:矩阵是有序的,从左下角来看,向上数字递减,向右数字递增, 因此从左下角开始查找,当要查找数字比左下角数字大时,右移.要查找数字比左下角数字小时,上移。这样找的速度最快。/** * @author LanceQ * @version 1.0 2021/4/23 */pu原创 2021-04-23 20:51:47 · 72 阅读 · 0 评论 -
剑指office----替换空格
剑指office----替换空格题目描述:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。问题分析:这道题不难,我们可以通过循环判断字符串的字符是否为空格,是的话就利用append()方法添加追加“%20”,否则还是追加原字符。或者最简单的方法就是利用: replaceAll(String regex,String replacement)方法了,一行代码就可以解决。/** *原创 2021-04-23 21:35:59 · 99 阅读 · 0 评论 -
求数组中a+b+c=0的所有满足条件的三元组
求数组中a+b+c=0的所有满足条件的三元组1. 代码2. 思路:题目描述 给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。注意:三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c)解集中不能包含重复的三元组。例如,给定的数组 S = {-10 0 10 20 -10 -40},解集为(-10, 0, 10) (-10, -10, 20原创 2021-04-24 17:11:30 · 1674 阅读 · 0 评论 -
链表两数相加
链表两数相加1. 题目描述2. 思路3. 代码1. 题目描述Leetcode:给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 8072. 思路由于输入的两个链表都是逆序存储数字的位数的,因此两个链表中同一原创 2021-04-24 19:53:35 · 450 阅读 · 0 评论 -
剑指office-----反转链表
反转链表1. 题目2. 代码1. 题目定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL2. 代码/** * @author LanceQ * @version 1.0 * @time 2021/4/24 20:26 */public class ReverseList { public stati原创 2021-04-24 20:49:07 · 92 阅读 · 0 评论 -
剑指 Offer 22------链表中倒数第k个节点
剑指 Offer 22------链表中倒数第k个节点输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例: 给定一个链表: 1->2->3->4->5, 和 k = 2. 返回链表 4->5./** * @author LanceQ * @version 1.原创 2021-04-25 15:29:12 · 56 阅读 · 0 评论 -
删除链表的倒数第 N 个结点
删除链表的倒数第 N 个结点给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]问题分析我们注意到这个问题可以容易地简化成另一个问题:删除从列表开头数起的第 (L - n + 1原创 2021-04-25 16:28:01 · 181 阅读 · 0 评论 -
笔记----翻转二叉树
翻转二叉树代码2. 为什么叫前序、后序、中序示例一:Input: root = [4,2,7,1,3,6,9]Output: [4,7,2,9,6,3,1]示例二:Input: root = [2,1,3]Output: [2,3,1]示例三:Input: root = []Output: []树的结构:public class TreeNode { int val; TreeNode left; TreeNode right; TreeNo原创 2021-04-29 20:36:09 · 91 阅读 · 0 评论 -
剑指 Offer 64. 求1+2+…+n
剑指 Offer 64. 求1+2+…+n求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45限制:1 <= n <= 10000class Solution { public int sumNums(int n) { Boolean b= n>0 && (n+=s原创 2021-04-30 21:20:57 · 65 阅读 · 1 评论