![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法/数据结构
Hollake
这个作者很懒,什么都没留下…
展开
-
二叉树的镜像、对称的二叉树---Java实现
二叉树的镜像题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:原二叉树 : 8 / \ 6 10 / \ / \ 5 7 9 11镜像二叉树: 8 / \ 10 6 / \ / \ 11 9 ...原创 2019-04-21 11:58:15 · 918 阅读 · 0 评论 -
数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。方法一:HashMap统计次数这种方法需要申请额外空间,在使用HashMap存入键值对后还需要进行遍历找到结果,复杂度太高,不建议使用方法二:在遍历数组的时候,先...原创 2019-06-19 16:19:44 · 299 阅读 · 0 评论 -
反转链表三种方法---Java
第一种方法:使用stack这种方法需要额外空间,创建栈,然后将链表遍历存入栈,接着弹出栈,重新连接链表,而且需要两次遍历。这种方法没什么技术含量,但是架不住思想很简单。。。所以如果笔试碰到,可以直接写,如果是面试的话只给出这种方法我觉得基本上就凉了。。。// 使用Stack反转链表 private static Node reverseList1(Node head) {...原创 2019-06-20 15:51:43 · 2920 阅读 · 0 评论 -
员工薪水排序问题(自己看错题系列)
题目描述:某公司中有N名员工。给定所有员工工资的清单,财务人员要按照特定的顺序排列员工的工资。他按照工资的频次降序排列,即给定清单中所有频次较高的工资将在频次较低的工资之前出现。如果相同数量的员工都有相同的工资,则将按照给定清单中该工资第一次出现的顺序排列。输入:该函数/方法的输入包括两个参数num(一个整数,表示员工的人数)和salaries(一个正整数列表,表示N名员工的工资)。输...原创 2019-09-03 14:59:57 · 4329 阅读 · 4 评论 -
给一个数组,把偶数放到左边,奇数放到右边(有序和无序)
思路:设置两个指针,一个less一个more,如果当前less位置的元素为偶数,那么和more位置的元素交换位置,more--,接着继续判断交换过来的元素是否是偶数,如果继续是偶数,那么继续和more位置的元素交换,一直循环到less>=more,复杂度为O(N)代码如下 public static void reOrderArray(int[] arr) { i...原创 2019-06-24 22:24:53 · 5516 阅读 · 1 评论 -
动态规划之数字三角形---Java
题目输入:输入格式: 5 //表示三角形的行数 接下来输入三角形 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5在上面的数字三角形中寻找一条...原创 2019-07-19 15:48:10 · 1759 阅读 · 4 评论 -
多重背包问题和01背包问题
多重背包问题相比01背包,限定了物品件数,求容量一定的情况下,价值最大多重背包代码import java.util.Scanner;public class Main1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (...原创 2019-08-05 10:07:59 · 562 阅读 · 0 评论 -
单源最短路径算法Dijkstra算法Java实现
最近在找工作,把自己当时参加比赛用的最短路径算法复习一下,简单实现一下图如下:输入和输出数据:Input:6 91 2 11 3 122 3 92 4 33 5 54 3 44 5 134 6 155 6 4Output:0 1 8 4 13 17代码:package arithmetic;import java.uti...原创 2019-08-12 14:48:53 · 1590 阅读 · 0 评论 -
大数相加,大数相乘
大数相加大数相加的核心思想就是对应位置的数相加后,再加上一次计算结果的进位,得到结果后,结果%10得到当前位置的数,结果/10得到进位,周而复始。 public static String add(String s1,String s2) { StringBuffer res = new StringBuffer(); s1 = new String...原创 2019-08-29 15:52:42 · 448 阅读 · 0 评论 -
旋转正方形矩阵
旋转正方形矩阵【题目】 给定一个整型正方形矩阵matrix,请把该矩阵调整成顺时针旋转90度的样子。【要求】 额外空间复杂度为O(1)。详细解释左神思路代码 public void rotate(int[][] matrix) { int a = 0;//表示正方形矩阵的起点的行号 int b = 0;//表示正方形矩阵的起点的列...原创 2019-09-03 11:51:45 · 538 阅读 · 0 评论 -
二叉树相关题目(不定时更新中)
二叉树前序,中序,后序递归非递归二叉树的前序遍历、中序遍历、后序遍历---java递归非递归实现 //前序遍历 public List<Integer> preorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<>(); St...原创 2019-09-04 12:22:31 · 1738 阅读 · 0 评论 -
数组的TopK的三种解决方法---Java
方法一:常规方法,先完全排序此种方法就不多做解释了,就是使用快排,归并,堆排序等方法先将数组完全排序,然后再取topK,时间复杂度为O(NlogN)。而且这种方法不适用于大数据量,小内存。方法二:快排思想,部分排序此种方法时借鉴快排的思想,在partition过程中,将数组分为了三个部分,左边是小于指定的数,中间是等于指定的数,右边是大于指定的数,这样,我们只需要让数组部分有序就可以拿...原创 2019-06-19 15:20:27 · 4199 阅读 · 0 评论 -
二分查找算法(递归与非递归两种方式)---Java
二分查找作为一个经典算法,有必要再温习一下非递归版本: /** * @param arr:需要查找的有序数组 * @param left:数组的左边界 * @param right:数组的右边界 * @param key:需要查找的key * @return: 返回找到的下标,找不到返回-1 */ public s...原创 2019-06-19 10:44:20 · 530 阅读 · 0 评论 -
查找两个数组中的相同元素---Java
两次遍历思考后想出来两种方法,第一种在两个数组中,每个数组不能存在重复元素,那么可以直接暴力循环,复杂度为为O(n2),而且这种方法只能适用于arr1和arr2各自中不存在重复元素。public static List<Integer> findSame(int[] arr1, int[] arr2) { List<Integer> list = ...原创 2019-06-19 09:45:41 · 14543 阅读 · 0 评论 -
二叉搜索树的后序遍历序列---Java实现
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。题目分析:二叉搜索树相对于二叉树来说,必须满足根节点的所有左子树元素都小于根节点,所有右子树节点都大于跟节点,而对于后序遍历来说,二叉树后序遍历最后一个元素为根节点,所以我们可以采用以下思路:来进行求解遍历数组,找到根节点的左子树和右子树,即...原创 2019-04-22 11:30:47 · 385 阅读 · 1 评论 -
二叉树的前序遍历、中序遍历、后序遍历---java递归非递归实现
本文基本参考https://blog.csdn.net/jssongwei/article/details/50790253,只供自己理解实现,侵删 前序遍历 首先访问根节点,再遍历左树,再遍历右树,注意。在遍历左、右子树时,也按照先访问根节点,再遍历左树,再遍历右树。例如下图前序遍历结果为:631254978 中序遍历 首先遍历左子树,再访问根节点,再遍历右子树。在遍历左、右...原创 2019-04-15 15:53:26 · 558 阅读 · 0 评论 -
剑指offer-重建二叉树---java实现
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。或者再给出后序遍历序列{7,4,2,5,8,6,3,1},让你通过后序和中序重建二叉树。其实中序后序重建二叉树和前序中序重建二叉树原理相同,所以我们...原创 2019-04-18 21:43:20 · 738 阅读 · 0 评论 -
五分钟搞懂什么是红黑树(全程图解)
这篇文章写得简单易懂,很容易看懂,转载一下http://www.360doc.com/content/19/0510/10/63985477_834745870.shtml前言红黑树,对很多童鞋来说,是既熟悉又陌生。熟悉是因为在校学习期间,准备面试时,这是重点。然后经过多年的荒废,如今已经忘记的差不多了。如果正在看文章的你,马上快要毕业,面临着找工作的压力;又或者你觉得需要将这块知识重新复...转载 2019-04-25 11:33:51 · 736 阅读 · 0 评论 -
两个有序数组的合并排序(归并思想),Java代码实现,并去重复,考虑空间利用率问题
搜了好多文章,发现代码是错的,没有达到去重的目的,而且还有人点赞,你们看代码难道不自己测一下看对不对吗?下面是我写的代码,代码看起来长,可能确实有点冗余,但是容易理解,如果有错或者可以优化,麻烦你指出来,可以共同学习,谢谢。题目要求:数组A,B有序,要求合并A,B,并且去除重复元素。下面代码实现的复杂度,设A和B的数组长度为M和N那么时间复杂度为O(M+N),如果中用数组实现,空间复杂度也...原创 2019-06-05 15:05:02 · 2584 阅读 · 4 评论 -
归并排序、快速排序、堆排序---Java实现(带注释)
归并排序:package sort;/** * Created by Hollake on 2019\5\26 0026. */public class MergeSort { public static void main(String[] args) { int[] arr = {72, 6, 57, 88, 60, 42, 83, 73, 48, 85...原创 2019-05-31 16:39:42 · 804 阅读 · 0 评论 -
数组实现队列---Java实现
此代码来源于左神的视频教程思路采用两个指针以及队列大小的变量,start和end以及size,添加元素,end向后移动,start不动,size+1,删除元素,end不动,start后移,size-1。当end移动到arr.length时候,如果队列没有满,也就是size!=arr.length,那说明数组arr的开始位置肯定是空的,所以继续添加元素的时候end重新移动到arr的0位置。...原创 2019-06-06 09:54:05 · 1785 阅读 · 0 评论 -
两个栈实现队列、两个队列实现栈---Java
两个栈实现队列采用两个栈,一个push栈,一个pop栈,每次只有当push的时候直接进push栈,每次pop的时候,只要只从pop栈中弹出,在pop栈为null的时候,将push栈中的所有元素压栈到pop栈中,这样就还原了元素添加的顺序,先进先出,注意,只有在pop栈为null的时候才能压栈,如果不是会乱序,不会达到先进先出的目的。举例:push栈添加1,2,3,4,5。 现在需要进行p...原创 2019-06-06 13:35:50 · 340 阅读 · 0 评论 -
[图解] 归并排序(动图很重要)
转载自https://www.jianshu.com/p/33cffa1ce613这篇文章动图清晰易懂1. 图示过程(1) 归并排序的流程(2) 合并两个有序数组的流程2. 动图展示3. Java代码实现public static void mergeSort(int[] arr) { sort(arr, 0, arr.length - 1);}...转载 2019-05-29 15:35:36 · 3259 阅读 · 0 评论 -
面试常见代码题目
目录最长公共子序列最长公共子串最长上升子序列最长连续上升子序列最长公共前缀最大子序列和无重复字符的最长子串大数相加大数相乘链表大数相加两数之和删除有序链表中的重复元素(只保留一个重复元素)数组去重一个数组奇偶分开,偶数在前奇数在后(不要求相对有序)一个数组奇偶分开,偶数在前奇数在后(要求变换前后相对有序)数组中除了两个数都只出现一次,...原创 2019-10-08 10:08:41 · 2619 阅读 · 1 评论