简单小算法
这瓜保熟么
平常心
展开
-
Java单链表排序
题目描述给定一个无序单链表,实现单链表的排序(按升序排序)。示例1输入[1,3,2,4,5]返回值{1,2,3,4,5}import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * } */public class Solution { /** * * @param head ListNode类 the h.原创 2021-02-18 13:04:27 · 1118 阅读 · 1 评论 -
Java给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2原创 2021-02-16 19:38:58 · 487 阅读 · 0 评论 -
Java计算根节点到叶子节点的所有路径表示的数字之和
题目描述给定一个仅包含数字0−9的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。例如根节点到叶子节点的一条路径是1→2→3,那么这条路径就用123来代替。找出根节点到叶子节点的所有路径表示的数字之和例如:这颗二叉树一共有两条路径,根节点到叶子节点的路径1→2用数字12代替根节点到叶子节点的路径1→3用数字13代替所以答案为12+13=25示例1输入{1,0}返回值10import java.util.*;/* ...原创 2021-02-16 17:34:13 · 454 阅读 · 0 评论 -
Java输入一棵二叉树,判断该二叉树是否是平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。public class Solution { public boolean IsBalanced_Solution(TreeNode root) { if(root == n原创 2021-02-16 17:03:18 · 207 阅读 · 0 评论 -
Java二叉树,计算节点值之和最大的路径的节点值之和是多少
题目描述给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。这个路径的开始节点和结束节点可以是二叉树中的任意节点例如:给出以下的二叉树,返回的结果为6示例1输入{-2,1}返回值1示例2输入{-2,#,-3}返回值-2import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * Tre..原创 2021-02-16 15:44:06 · 562 阅读 · 0 评论 -
Java数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。示例1输入[1,2,3,2,2,2,5,4,2]返回值2public class Solution { /** * 剑指offer-28-数组中出现次数超过一半的数字 * 数组中有一个数字出现的次数超过数组长度的一半,请.原创 2021-02-10 16:47:00 · 530 阅读 · 0 评论 -
Java以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回
题目描述以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。(字符串长度不大于100000,保证字符串仅由'0'~'9'这10种字符组成)示例1输入"1","99"返回值"100"说明1+99=100 Ascii码表参照:看十进制列和字符列 可以看到字符的'0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 对应的十进制数字,可以得知在针对字符数字的情况下,如:public static void m.原创 2021-02-09 19:43:50 · 2785 阅读 · 0 评论 -
Hashmap如何实现key的唯一性
Map和Set不可存在重复元素1对于 HashMap HashSet的实现是:维护了一张 HashTable 。容器中的元素全部存储在Hashtable 中,每次添加元素都会先判断是否有重复的元素,hashcode()方法进行比较,若一样再equals()方法比较,他们的底层数据结构如果也相同的话,JVM就认为数据已经存在了,就不会添加数据!2 对于 TreeMap TreeSet他们底层是数据结构的实现是:维护了一棵二叉树。 容器中添加元素的时候,他们有是怎么判断是否有相同元素...转载 2021-02-02 21:54:05 · 1825 阅读 · 0 评论 -
Java-给定一个无序数组arr,找到数组中未出现的最小正整数
题目描述给定一个无序数组arr,找到数组中未出现的最小正整数例如arr = [-1, 2, 3, 4]。返回1arr = [1, 2, 3, 4]。返回5[要求]时间复杂度为O(n)O(n),空间复杂度为O(1)O(1)示例1输入[-1,2,3,4]返回值1import java.util.*;public class Solution { /** * 原地哈希,把数组中取值在1到n的数放到对应的位置, * 比如1.原创 2021-01-31 20:22:32 · 1859 阅读 · 0 评论 -
Java-求数组中a+b+c=0的所有满足条件的三元组
题目描述给出一个有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)示例1输入[-2,0,1,1,2]返回值[[-2,0,2],[-2,1,1]]import java.util.*...原创 2021-01-31 14:15:47 · 1778 阅读 · 0 评论 -
Java整形数组arr求容器能装多少水
题目描述给定一个整形数组arr,已知其中所有的值都是非负的,将这个数组看作一个容器,请返回容器能装多少水。具体请参考样例解释示例1输入[3,1,2,5,2,4]返回值5说明示例2输入[4,5,1,3,2]返回值2备注:1 \leq N \leq 10^61≤N≤106import java.util.*;public class Solution { /** * Java版 《容器盛水问题》原创 2021-01-30 17:30:49 · 448 阅读 · 0 评论 -
给不同面值硬币,计算N发分有几种表示形式
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。示例1:输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1说明:你可以认为每种硬币的数量是无限的。解题思路:可以先看一个简单的找零钱问题。有...转载 2021-01-26 21:21:36 · 706 阅读 · 0 评论 -
找出数组中重复的数字-O(1)空间复杂度实现
同样还是0到n-1给了我新的想法,我甚至可以不用开辟新的数组空间,直接在原数组上通过下标索引将数组进行重排,那么此时时间复杂度仍然还是O(n),但是空间复杂度却变成了O(1) for ( int i = 0 ; i < a.length ; i++ ){ while( a[i] != i ){ if( a[i] == a[ a[i]] ){ System.out.print(a[i.转载 2021-01-26 20:20:28 · 716 阅读 · 0 评论 -
Java判断一颗数是否对称
题目描述给定一棵二叉树,判断琪是否是自身的镜像(即:是否对称)例如:下面这棵二叉树是对称的 1 / \ 2 2/ \ / \3 4 4 3下面这棵二叉树不对称。 1 / \ 2 2 \ \ 3 3备注:希望你可以用递归和迭代两种方法解决这个问题示例1输入{1,2,2}返回值trueimport java.util.*;/* * public class Tre...原创 2021-01-21 20:56:59 · 324 阅读 · 0 评论 -
Java找出所有的根节点到叶子节点的节点值之和等于sum 的路径
题目描述给定一个二叉树和一个值sum,请找出所有的根节点到叶子节点的节点值之和等于sum的路径,例如:给出如下的二叉树,sum=22,返回[[5,4,11,2],[5,8,9]]示例1输入{1,2},1返回值[]示例2输入{1,2},3返回值[[1,2]]import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left...原创 2021-01-21 17:38:58 · 310 阅读 · 0 评论 -
Java算每一条从根节点到叶子节点的路径的和
题目描述给定一个仅包含数字0−9的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。例如根节点到叶子节点的一条路径是1→2→3,那么这条路径就用123来代替。找出根节点到叶子节点的所有路径表示的数字之和例如:这颗二叉树一共有两条路径,根节点到叶子节点的路径1→2用数字12代替根节点到叶子节点的路径 1→3用数字13代替所以答案为\ 12+13=2512+13=25示例1输入{1,0}返回值10示例2输入{1,#,9}...原创 2021-01-21 16:58:53 · 517 阅读 · 0 评论 -
Java用PriorityQueue实现topk排序
TopK思想:https://blog.csdn.net/wufaliang003/article/details/82940218题目描述给定String类型的数组strArr,再给定整数k,请严格按照排名顺序打印 出次数前k名的字符串。[要求]如果strArr长度为N,时间复杂度请达到O(N \log K)O(NlogK)输出K行,每行有一个字符串和一个整数(字符串表示)。你需要按照出现出现次数由大到小输出,若出现次数相同时字符串字典序较小的优先输出示例1输入..原创 2021-01-21 14:34:20 · 809 阅读 · 1 评论 -
Java大顶堆、小顶堆排序原理
https://www.cnblogs.com/luomeng/p/10618709.html转载 2021-01-21 02:32:10 · 204 阅读 · 0 评论 -
快排最坏时间复杂度
最好的情况:每次选的pivot几乎能把数据均分成两半,这样递归树的深度就是logN,这样快排的时间复杂度为O(NlogN)最坏的情况:每次找的pivot将数组分成两部分,其中有一部分是空,这样递归树就变成了一棵倾斜的树。树的深度为n-1,这样时间复杂度就变成了O(N^2).一般当数据有序或者局部有序的时候会出现这种坏的情况,比如数组正序或者逆序,(数字完全相同的时候也是有序的特殊情况)。解决方法:选pivot的时候可以随机选,而不是每次选第一个或者最后一个 对子数组进行快排序的时候可以先扫描一转载 2021-01-21 01:07:49 · 2239 阅读 · 0 评论 -
Java实现一个特殊功能的栈-在实现栈的基本功能的基础上-再实现返回栈中最小元素的操作
题目描述实现一个特殊功能的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。示例1输入[[1,3],[1,2],[1,1],[3],[2],[3]]返回值[1,2]备注:有三种操作种类,op1表示push,op2表示pop,op3表示getMin。你需要返回和op3出现次数一样多的数组,表示每次getMin的答案1<=操作总数<=1000000-1000000<=每个操作数<=1000000数据保证没有不合法的..原创 2021-01-20 23:26:22 · 214 阅读 · 0 评论 -
Java计算一个数的平方根(即:根号)
题目描述实现函数int sqrt(int x).计算并返回x的平方根(向下取整)示例1输入2返回值1import java.util.*;public class Solution { /** * 根据平方数的性质——连续n个奇数相加的结果一定是平方数。 * 如:9=1+3+5; * 16=1+3+5+7; * 所以,不断的进行奇数相加,并判断x大小即可 有几个奇数 结果就是几 但是当==0的时候 会多循环一...原创 2021-01-20 14:27:19 · 5805 阅读 · 0 评论 -
Java从有序数组中找出缺失的数字
题目描述从0,1,2,...,n这n+1个数中选择n个数,组成有序数组,找出这n个数中缺失的那个数,要求O(n)尽可能小。示例1输入[0,1,2,3,4,5,7]返回值6import java.util.*;public class Solution { /** * 找缺失数字 * @param a int整型一维数组 给定的数字串 * @return int整型 */ public int solve (.原创 2021-01-19 20:17:43 · 2062 阅读 · 0 评论 -
Java根据前序、中序数组重建二叉树并返回二叉树的右视图
二叉树右视图https://blog.csdn.net/m0_37605197/article/details/105836456题目描述请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图示例1输入[1,2,4,5,3],[4,2,5,1,3]返回值[1,3,5]import java.util.*;public class Solution { List<Integer> list = new ArrayLis.原创 2021-01-19 19:45:19 · 249 阅读 · 0 评论 -
Java计算指定字符串中最大回文子串长度
题目描述对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。给定字符串A以及它的长度n,请返回最长回文子串的长度。示例1输入"abc1234321ab",12返回值7import java.util.*;public class Solution { public int getLongestPalindrome(String A, int n) { if(n <= 0){ retur.原创 2021-01-19 01:23:17 · 807 阅读 · 0 评论 -
Java斐波那契数列
public class Solution { public int Fibonacci(int n) { //斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233 if(n<=1){ return n; } return Fibonacci(n-1) + Fibonacci(n-2); }}...原创 2021-01-18 13:41:59 · 122 阅读 · 0 评论 -
Java求2字符串的最长公共子串
题目描述给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1。示例1输入"1AB2345CD","12345EF"返回值"2345"import java.util.*;public class Solution { /** * longest common substring * @param str1 string字符串 the string * @param str2 stri.原创 2021-01-18 12:31:26 · 1311 阅读 · 0 评论 -
Java判断给出的字符串是否是合法的括号序列
题目描述给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。示例1输入"["返回值false示例2输入"[]"返回值trueimport java.util.*;public class Solution { /** * 有效的括号 * <p&原创 2021-01-17 22:01:34 · 894 阅读 · 0 评论 -
Java计算整形数组最长无重复子串长度
题目描述给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。示例1输入[2,3,4,5]返回值4示例2输入[2,2,3,4,3]返回值3备注:1<n<10的5次方import java.util.*;public class Solution { /** * * @param arr int整型一维数组 the array * @retu.原创 2021-01-17 20:48:35 · 876 阅读 · 2 评论 -
Java合并2个有序链表(2个链表中含重复元素)
题目描述将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的,且合并后新链表依然有序。示例1输入{1},{2}返回值{1,2}示例2输入{2},{1}返回值{1,2}示例3输入{1,2},{1}返回值{1,1,2}import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; *原创 2021-01-17 01:56:21 · 364 阅读 · 0 评论 -
Java青蛙跳台阶-斐波那契数列
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。示例1输入1返回值1示例2输入4返回值5public class Solution { /** * 斐波那契(指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上, * 斐波那契数列以如下被以递推的方法定义: * F(0)=1,F(1)=1, F(n)=F(n - 1原创 2021-01-16 22:08:33 · 148 阅读 · 0 评论 -
Java二叉树层序遍(一层一层地遍历,和之字型打印不同)
题目描述给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)例如:给定的二叉树是{3,9,20,#,#,15,7},该二叉树层序遍历的结果是[[3],[9,20],[15,7]]示例1输入{1,2}返回值[[1],[2]]示例2输入{1,2,3,4,#,#,5}返回值[[1],[2,3],[4,5]]import java.util.*;/* * public class TreeNode { * i原创 2021-01-16 18:03:38 · 285 阅读 · 0 评论 -
Java删除链表的倒数第n个节点并返回链表的头指针
题目描述给定一个链表,删除链表的倒数第n个节点并返回链表的头指针例如, 给出的链表为:1->2->3->4->5, n= 2. 删除了链表的倒数第n个节点之后,链表变为1->2->3->5.备注:题目保证n一定是有效的请给出请给出时间复杂度为\ O(n)O(n)的算法import java.util.*;/* * public class ListNode { * int val; * ListNode nex..原创 2021-01-16 17:28:10 · 298 阅读 · 1 评论 -
Java合并2个有序数组
题目描述给出两个有序的整数数组 A和 B,请将数组 B合并到数组 A中,变成一个有序的数组注意:可以假设数组A有足够的空间存放数组B的元素, A和 B中初始的元素数目分别为 m和 npublic class Solution { public void merge(int A[], int m, int B[], int n) { //数组A中初始化好的index长度 int aInitIndex = m - 1; ..原创 2021-01-16 16:41:18 · 477 阅读 · 0 评论 -
贪心股票价格
题目描述假设你有一个数组,其中第i个元素是股票在第i天的价格。你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。示例1输入[1,4,2]返回值最大收益是1块钱买,4块钱卖 4-1=3示例2输入[2,4,1]返回值最大收益是2块钱买,4块钱卖 4-2=2import java.util.*;public class Solution { /** * * @pa..原创 2021-01-15 21:04:50 · 155 阅读 · 0 评论 -
Java判断该链表是否为回文结构
题目描述给定一个链表,请判断该链表是否为回文结构。示例1输入[1,2,2,1]返回值true对于一个回文链表可以发现,当指针节点在对其进行遍历时,走到中间位置就等同于从中间倒着往前走如 1->2->3->2->1,1->2->2->1所以可以将中间以后的部分视为前半部分的反转因此可以将中间以后的部分进行反转,就能得到一个和前半部分相同的链表,这也变成了判断回文结构的条件import java.util.*;/* *原创 2021-01-15 01:45:03 · 306 阅读 · 0 评论 -
Java分别判断一颗二叉树是否为搜索二叉树和完全二叉树
题目描述给定一棵二叉树,已经其中没有重复值的节点,请判断该二叉树是否为搜索二叉树和完全二叉树。示例1输入{2,1,3}返回值[true,true]import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class Solution { /*原创 2021-01-14 22:19:46 · 558 阅读 · 0 评论 -
Java验证一棵树是否是完全二叉树
完全二叉树 若设二叉树的深度为k,除第 k 层外,其它各层 (1~k-1) 的结点数都达到最大个数,第k 层所有的结点都连续集中在最左边,这就是完全二叉树。判断二叉树是否为完全二叉树。完全二叉树的定义是,前n-1层都是满的,第n层如有空缺,则是缺在右边,即第n层的最右边的节点,它的左边是满的,右边是空的。以3层二叉树为例,以下情况为完全二叉树:我们可以根据题意做题即可,我们可以采用分层遍历的方式,在判断一个具体的节点的时候,我们可以有如下的判断依据:(1).如果...原创 2021-01-14 22:18:22 · 698 阅读 · 1 评论 -
Java输入两棵二叉树AB-判断B是不是A的子树
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { public原创 2021-01-12 21:26:18 · 154 阅读 · 0 评论 -
Java用两个栈来实现一个队列,完成队列的Push和Pop操作
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) {原创 2021-01-12 17:48:06 · 294 阅读 · 0 评论 -
输入一个链表,输出该链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。示例1输入1,{1,2,3,4,5}返回值{5}/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode FindKthToTail(ListNod原创 2021-01-12 16:13:13 · 63 阅读 · 0 评论