![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java算法
摩羯的成长期
我愿世界以黑白,不愿爱之人,受苦。
我愿世界以孤独,不愿思之人,思重。
展开
-
最长连续序列letcode
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。package com.yunlong.test;import java.util.*;public class SerMaxSubArray { public static void main(String[] args) { int[] nums = {9,1,-3,2,4,8,3,-1,6,-2,-4,7}; longestConsecutive(nu原创 2021-04-27 14:22:44 · 158 阅读 · 0 评论 -
删除链表中某个元素
值得记录的问题,一开始用了LinkedBlockingQueue,使用pop()出队的时候,发现空指针,这是因为链表的结构导致,属于常识(我不知道o(╥﹏╥)o)package com.yunlong.test;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;// Lin原创 2021-04-27 10:34:19 · 155 阅读 · 0 评论 -
202. Happy Number and 203. Remove Linked List Elements
Happy NumberWrite an algorithm to determine if a number n is “happy”.A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process unt.原创 2020-07-29 21:01:42 · 126 阅读 · 0 评论 -
将二叉搜索树变平衡(letcode)
将二叉搜索树变平衡给你一棵二叉搜索树,请你返回一棵 平衡后 的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过 1 ,我们就称这棵二叉搜索树是 平衡的 。如果有多种构造方法,请你返回任意一种。示例:输入:root = [1,null,2,null,3,null,4,null,null]输出:[2,1,3,null,null,null,4]解释:这不是唯一的正确答案,[3,1,4,null,2,null,null] 也是一个可行的构.原创 2020-07-09 00:41:02 · 162 阅读 · 0 评论 -
合并二叉树(letcode)
合并二叉树给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入: Tree 1 Tree 2 1 2 .原创 2020-07-07 22:05:44 · 98 阅读 · 0 评论 -
二叉树深度相关算法 + 平衡树判断(letcode)
二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree著作权归领扣网络.原创 2020-07-07 21:59:22 · 119 阅读 · 0 评论 -
验证二叉搜索树
验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6 输出: false解释: 输入为: [5,1,4,null,null,3,6]。 .原创 2020-07-03 00:22:10 · 76 阅读 · 0 评论 -
最长公共子串和最长公共子序列
给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3, 2, 1] 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。代码典型的动态规划题目:class Sol原创 2020-07-01 22:49:22 · 105 阅读 · 0 评论 -
letcode 超级计算器
letcode 16.26. 计算器。给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。表达式仅包含非负整数,+, - ,*,/ ,(,)四种运算符和空格 。 整数除法仅保留整数部分。示例 1:输入: "3+2*2"输出: 7示例 2:输入: " 3/2 "输出: 1示例 3:输入: " 3+5 / 2 "输出: 5说明:你可以假设所给定的表达式都是有效的。请不要使用内置的库函数 eval。分析一个复杂的过程:// 超级原创 2020-07-01 21:51:39 · 225 阅读 · 0 评论 -
letcode 24点游戏
24 点游戏你有 4 张写有 1 到 9 数字的牌。你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24。示例 1:输入: [4, 1, 8, 7]输出: True解释: (8-4) * (7-1) = 24示例 2:输入: [1, 2, 1, 2]输出: False注意:除法运算符 / 表示实数除法,而不是整数除法。例如 4 / (1 - 2/3) = 12 。每个运算符对两个数进行运算。特别是我们不能用 - 作为一元运算符。例如,[1, 1, 1, 1] 作为输入时.原创 2020-06-29 01:33:03 · 105 阅读 · 0 评论 -
Remove Duplicate Node LCCI
Write code to remove duplicates from an unsorted linked list.Example1: Input: [1, 2, 3, 3, 2, 1] Output: [1, 2, 3]Example2: Input: [1, 1, 1, 1, 2] Output: [1, 2]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicate-node-lcci著作权归领扣网原创 2020-06-26 02:24:57 · 174 阅读 · 0 评论 -
letcode数组插入合并
Given a collection of intervals, merge all overlapping intervals.合并有交集的。Input: [[1,3],[2,6],[8,10],[15,18]]Output: [[1,6],[8,10],[15,18]]Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].Input: [[1,4],[4,5]]Output: [[1,5]]原创 2020-05-23 02:13:44 · 120 阅读 · 0 评论 -
约瑟夫环问题
题目:约瑟夫环类似问题,n个人顺序编号报数,到m则被淘汰,找到剩下的最后一个人。分析:代码实现:package com.stuk;import java.util.ArrayList;import java.util.List;public class Main { public static void main(String[] args) { la...原创 2020-01-04 14:32:46 · 107 阅读 · 0 评论 -
字符串逆序复杂操作(stringBuilder的利用)
题目一,字符串的完全逆转。例如:输入adcde,输出edcba。package com.stuk;public class reverseStr { public static String fun2(String str){ return new StringBuilder(str).reverse().toString(); } public ...原创 2020-01-03 01:57:50 · 428 阅读 · 0 评论 -
二叉树深度和平衡二叉树
题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。(空树或者左右子树深度之差不超过1)二叉树准备:package com.stuk;public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { ...原创 2019-12-14 12:33:37 · 115 阅读 · 0 评论 -
二叉树深度优先搜索算法
题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路分析:是图形相关的算法。首先考虑解决图形相关的广度搜索优先算法就是深度搜索优先算法。这里而言是后者。后来回顾(重要):实现时,我们debug发现上面的分析过程右很大的一个漏洞。上面只做了一次判断,然而要删除一个结点元素值,实际中需要以右...原创 2019-12-03 13:42:26 · 1291 阅读 · 0 评论 -
二叉树层序遍历
从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:以下图为例子用一个list/queue等集合对象来存储。为了方便操作,我们选择直接pop/poll的stack或queue,这样我们就需要去做过多的操作。过程分析:1,初始存入结点1;2,判断集合存储对象的长度,大于0,则弹出(需判断弹出是否为NULL),存入返回list,并将当前结点的子节点存入集合存储对象。当长度小于等于0...原创 2019-11-30 17:30:33 · 80 阅读 · 0 评论 -
栈的压入,弹出(判断是否可能是弹出序列)
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)。过程分析:这是模拟栈的压入和弹出的题目。情形大致可能的举例:最后开始弹出:1,...原创 2019-11-30 15:46:20 · 189 阅读 · 0 评论 -
矩阵逆时针打印
题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.代码实现(纯数学逻辑):package com.stuk;import java.util.ArrayLis...原创 2019-11-30 14:49:03 · 181 阅读 · 0 评论 -
字符串转数字(利用BigInteger处理int类型越界)
最开始用int处理,发现通过率只有76%。检查发现对于Integer.MAX_VALUE/MIN_VALUE越界无法处理。于是有了利用BigInteger来处理越界问题。题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0代码实现:(运行时间34ms)import java.math.BigInteger;public c...原创 2019-11-29 13:48:21 · 985 阅读 · 0 评论 -
求和(利用lamda和stream对list操作)
题目:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。代码实现:import java.util.ArrayList;public class Solution { public int Sum_Solution(int n) { ArrayList<Integer>...原创 2019-11-29 00:49:52 · 272 阅读 · 0 评论 -
大整数和大浮点数的类似的算法处理
JAVA8中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,至于两个类的对象能表示最大范围不清楚,理论上能够表示无线大的数,只要计算机内存足够大。当我们遇到类似处理超大数的,往往用这两个就能解决问题。BigDecimal也类似,要使用时,进去查看就好。题目:计算N(1<n<=100000) 的阶乘。我们发现18!> Integer.MAX...原创 2019-11-27 22:05:11 · 114 阅读 · 0 评论 -
穷举算法(是一种思维)
题目:(纯数学分析题)小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出所有和为S的连续正数序列。...原创 2019-11-27 01:12:54 · 262 阅读 · 0 评论 -
贪心算法和动态规划
动态规划:依赖于有待做出的最优选择,分治思想和解决冗余, 自底向上最后一个子问题就是初始问题的解。贪心算法:依赖于当前已经做出的所有选择。 自顶向下逐步最优解,寻找到最终最优解,简单来说就是每一次选择都是最优。两者缺点:消耗空间大。需要你本人由很强大的数学分析总结能力。题目:给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0]...原创 2019-11-26 01:19:21 · 125 阅读 · 0 评论 -
小数的二进制计算
首先二进制是如何计算?0.3 3二进制转换规则:相乘留整位正序,点后再相乘 0.3 x 3 ------- 0.9 0 3 ------ 2.7 2 0.7 ........ 题目:输入0.0000009<n<1的小数和一个1< n < 10,输出n的m进制保留10位。输入0 0结束。...原创 2019-11-22 20:46:42 · 2971 阅读 · 0 评论 -
利用位操作算法实现
题外篇:人外人,天外天。 以前学的东西人家能用,不是天生,而是别人知道这个思路。思路就在于积累。这就需要更多的机会,因此度日的工作不做也罢。正题:大背景:最终机器代码都是二进制码,计算等都是位的操作,所以很多的算法问题都可以回归到位操作上去。特别是最基本的底层问题,比如加减乘除等(计算机中减法即是加法,除法即是乘法,反码有关)。我们一定要熟记二进制2^n二进制形式:1000…,算法涉及...原创 2019-11-22 01:03:00 · 130 阅读 · 0 评论 -
图形搜索算法
深度优先搜索和广度优先搜索,都是图形搜索算法。相似而不相同,不相同主要体现在用途上。题目:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = ...原创 2019-11-21 00:32:26 · 540 阅读 · 0 评论 -
思考题(一)
1, 编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。package com.stuk;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import ...原创 2019-11-19 13:22:02 · 145 阅读 · 0 评论 -
字典排序算法
用于解决全排列问题。字典顺序(字典算法):1<2<3…<a<b<c…问题:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。代码实现:(代码实现尽量减少临时变量)package com.stuk;import java.util....原创 2019-11-19 00:57:18 · 347 阅读 · 0 评论 -
树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。知识了解:自行了解简单概念:左子树、右子树,大顶堆、小顶堆以及二叉树延申的算法。二叉树特性:二叉树的每个结点至多只有二棵子树(不存在度大于2的结点)...原创 2019-11-11 22:43:24 · 95 阅读 · 0 评论 -
链表基本理解
问题:输出链表总倒数第k个节点。问题代码:(两个指针记录,最后一个指向NULL,另一个就是要输出的值)/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution...原创 2019-11-10 12:38:33 · 99 阅读 · 0 评论 -
递归算法
递归:简单来说,两个条件,一,不停的压栈(就是函数自身不停的调用自身);二,跳出压栈的条件。比如:1+ … + 100;package com.stuk;public class Sort { public static int sum = 0; static public void main(String[] args) { sum = recFun...原创 2019-11-07 23:40:03 · 84 阅读 · 0 评论 -
排序算法
常见的排序算法:冒泡排序、选择排序、快速排序、插入排序、希尔排序、归并排序、基数排序以及堆排序先看看用方法:package com.stuk;import java.util.*;import java.util.stream.Collectors;public class Sort { static public void main(String[] args) { ...原创 2019-11-05 00:42:57 · 98 阅读 · 0 评论