数据结构与算法
y_凉介
爱吃菜的喵~
展开
-
剑指之序列化二叉树
题目描述请实现两个函数,分别用来序列化和反序列化二叉树思路序列化:用前序遍历,用字符串保存结点值,如果是空结点,用null表示,依次:根左右反序列化:按照前序顺序,递归的使用字符串中的字符创建一个二叉树/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = n...原创 2019-07-31 19:45:15 · 127 阅读 · 0 评论 -
剑指之从上往下打印二叉树
从上往下打印出二叉树的每个节点,同层节点从左至右打印import java.util.ArrayList;import java.util.Deque;import java.util.LinkedList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = ...原创 2019-07-20 20:32:31 · 82 阅读 · 0 评论 -
剑指offer 把二叉树打印成多行
题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行import java.util.ArrayList;import java.util.Deque;import java.util.LinkedList;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNod...原创 2019-07-25 00:58:04 · 82 阅读 · 0 评论 -
剑指之删除链表中重复的结点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5/* public class ListNode { int val; ListNode next = null; ListNode(int val)...原创 2019-07-24 23:41:53 · 92 阅读 · 0 评论 -
二进制中1的个数
剑指offer之二进制中1的个数public class Solution { public int NumberOf1(int n) { int count = 0; while (n != 0) { ++count; n = (n - 1) & n; } retu...原创 2019-07-18 02:26:59 · 121 阅读 · 0 评论 -
斐波那契数列
剑指offer之斐波那契数列大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39public class Solution { public int Fibonacci(int n) { if (n < 2) { return n; } ...原创 2019-07-18 02:18:02 · 82 阅读 · 0 评论 -
青蛙跳台阶
剑指offer之青蛙跳台阶//一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)public class Solution { public int JumpFloor(int target) { if (target < 3) { return target; ...原创 2019-07-18 01:54:29 · 133 阅读 · 0 评论 -
旋转数组的最小数字
剑指offer之旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0import java.util.ArrayList;public class Sol...原创 2019-07-18 01:46:18 · 74 阅读 · 0 评论 -
用两个栈实现队列
剑指offer之用两个栈实现队列用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack...原创 2019-07-18 01:34:38 · 84 阅读 · 0 评论 -
重建二叉树
剑指offer之重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回/** * Definition for binary tree * public class TreeNode { * ...原创 2019-07-18 01:28:03 · 89 阅读 · 0 评论 -
从尾到头打印链表
剑指offer之从尾到头打印链表输入一个链表,按链表值从尾到头的顺序返回一个ArrayList/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* ...原创 2019-07-18 01:16:43 · 84 阅读 · 0 评论 -
剑指之第一个只出现一次的字符
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).//最容易想到,也最复杂的方法(不建议)public class Solution { public int FirstNotRepeatingChar(String str) { if (str.length...原创 2019-07-20 22:57:02 · 74 阅读 · 0 评论 -
剑指之连续子数组的最大和
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会...原创 2019-07-20 23:55:55 · 71 阅读 · 0 评论 -
剑指之把字符串转换成整数
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0示例1输入复制+21474836471a33输出复制214...原创 2019-07-22 17:06:48 · 95 阅读 · 0 评论 -
剑指之字符流中第一个不重复的字符
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。import java.util.HashMap;public class Solution { HashMap<Character,Integer> map = ...原创 2019-07-22 16:43:25 · 96 阅读 · 0 评论 -
剑指之二叉树中和为某一值的路径
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)/** 减法public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = ...原创 2019-07-22 16:18:11 · 101 阅读 · 0 评论 -
剑指之二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度//递归实现:如果根节点的只有一个子节点,则对应的子节点+1;如果两个节点都存在,比较两个子树的深度,深度大的+1,返回;/**public class TreeNode { int val = 0; TreeNode left = null; Tre...原创 2019-07-22 15:42:41 · 105 阅读 · 0 评论 -
剑指之数字在排序数组中出现的次数
统计一个数字在排序数组中出现的次数//时间复杂度O(n)public class Solution { public int GetNumberOfK(int [] array , int k) { int count=0; for(int i = 0; i<array.length; i++){ if(array[i] ==...原创 2019-07-22 15:19:12 · 84 阅读 · 0 评论 -
剑指之数组中重复的数字
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2public class Solution { // Parameters: // numbers: a...原创 2019-07-21 23:39:06 · 144 阅读 · 0 评论 -
剑指之构建乘积数组
题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法思路将B[i]=A[0]A[1]…*A[i - 1]A[i + 1]…*A[n - 1]分为两部分:第一部分:A[0]A[1]…A[i - 1]第二部分:A[i + 1]… A[n - 2] *A[n - ...原创 2019-08-02 23:40:48 · 162 阅读 · 0 评论 -
剑指之二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向非递归/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {...原创 2019-08-02 22:56:30 · 129 阅读 · 0 评论 -
剑指之和为S的两个数字
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的import java.util.ArrayList;public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ...原创 2019-07-21 17:29:40 · 79 阅读 · 0 评论 -
剑指之两个链表的第一个公共结点
输入两个链表,找出它们的第一个公共结点/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/import java.util.Stack;public class Solution { pub...原创 2019-07-21 16:32:15 · 85 阅读 · 0 评论 -
替换空格
剑指offer之替换空格请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happypublic class Solution { public String replaceSpace(StringBuffer str) { StringBuffer strResult = new...原创 2019-07-18 00:59:40 · 68 阅读 · 0 评论 -
二维数组中的查找
剑指offer之二维数组中的查找在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数public class Solution { public boolean Find(int target, int [][] array) { for (in...原创 2019-07-18 00:36:52 · 57 阅读 · 0 评论 -
数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。import java.util.*;public class Solution { public int MoreThanHalfNum_Solution(in...原创 2019-07-19 02:07:37 · 72 阅读 · 0 评论 -
剑指之左旋转字符串
题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!思路把字符串分为两部分,假设n为3,要把前三个字符移到后面,就把这两个字符分到第一部分,剩下的...原创 2019-07-23 16:17:43 · 109 阅读 · 0 评论 -
数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方public class Solution { static boolean b = false; public double Power(double base, int exponent) { if (equal(base, 0)) ...原创 2019-07-19 02:07:59 · 154 阅读 · 1 评论 -
剑指之矩形覆盖
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?public class Solution { public int RectCover(int target) { if (target < 3) { return target; } ...原创 2019-07-18 19:38:39 · 104 阅读 · 0 评论 -
八皇后问题
八皇后问题: 在国际象棋中,皇后可以在没有限定一步走几格的前提下,对棋盘中的其他棋子进行直向吃、横向吃以及对角线方向吃,皇后在放入之前必须考虑所放位置的直线方向、横向方向以及对角线方向是否已经放置了皇后 在8*8棋盘上称其为八皇后问题,在N*N棋盘上就称其为N皇后问题算法分析: 八皇后问题就是利用堆栈结构以及回溯算法的策略 ...原创 2018-09-11 23:45:06 · 161 阅读 · 0 评论 -
排序算法之希尔排序
希尔排序算法分析: 希尔排序的算法原理类似于插入排序,但是它减少了数据移动的次数,排序的原则是将数据划分成特定间隔的几个子集,以插入算法完成子集内数据的排序,后逐渐减少间隔的距离 假设存放待排数据的数组长度为n,开始的特定间隔取n/2,而后逐渐减少为n/4,n/8...直到间隔为0,停止代码实现import java.util.Scanner;...原创 2018-09-06 23:14:00 · 153 阅读 · 0 评论 -
基数排序
基数排序又称桶排序,此排序方法不需要进行元素间的相互比较,属于分配排序方式,即按照多个关键字进行排序 具体算法: 对于待排序的数据,首先确定数的最大位数,其他小于此位数的数据,左边补零 建立10个桶,桶号依次为:0,1,2,3,4,5,6,7,8,9 按照位数上的数字,放到对应的桶中 ...原创 2018-09-09 23:48:37 · 100 阅读 · 2 评论 -
排序算法之快速排序
快速排序 快排(简称)是一种分而治之的算法,即就是将要排序的数据分割成独立的两部分,其中一部分的所有数据都要比另外一部分的所有数据要小,按照这种方法对这两部分分别进行快排,重复实现此过程,最后实现整个数据变成有序序列 快排的步骤如下: 以数组a[8]={50,80,95,10,4,56,2,48}为例(数组在程序中可自行输入) ...原创 2018-08-29 19:47:30 · 139 阅读 · 0 评论 -
排序算法之冒泡排序(Java版)
排序:即使集合或数组中的元素有序化本篇介绍最简单、最易掌握的冒泡排序冒泡排序: 是一种简单的排序算法, 冒泡排序就像学生站队一样,要在老师的引导下,以某位同学位基准,其他学生按身高的矮高次序排序 以数组为例:它将一个数组中的两个元素进行比较,并将最小的元素交换到首位,,使数组中的元素成升序排列。从首位开始,取连续两个元素开始比较,两个元素中最小的会冒...原创 2018-08-29 00:38:12 · 412 阅读 · 0 评论 -
堆排序之小根堆
一、堆 1.概念:它是一种完全二叉树(即前n-1层是满的,最后一层连续缺失右边的结点) 2.堆的目的:排序 3.堆的创建:创建一棵完全二叉树 4.存储方式:链式存储,按层存储 5.算法:建立结构体,声明结点类型 typedef struct node{ ...原创 2018-07-26 20:16:37 · 5931 阅读 · 0 评论 -
剑指之翻转单词顺序列
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?public class...原创 2019-07-23 17:09:40 · 84 阅读 · 0 评论 -
剑指之包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))import java.util.Stack;public class Solution { private Stack<Integer> stack = new Stack<Integer>(); private Stack<Integer> ...原创 2019-07-19 02:37:59 · 80 阅读 · 0 评论 -
数组中只出现一次的数字
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。//num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为返回结果public class Solution { public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]...原创 2019-07-19 22:59:46 · 81 阅读 · 0 评论 -
剑指之二叉树的镜像
操作给定的二叉树,将其变换为源二叉树的镜像/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public clas...原创 2019-07-19 19:43:27 · 65 阅读 · 0 评论 -
剑指之树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val;...原创 2019-07-19 19:24:54 · 69 阅读 · 0 评论