![](https://img-blog.csdnimg.cn/aa42908470dc4a6abc5f510ffd9ff945.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 55
Java实现
yelvens
我很懒,什么都没留下…
展开
-
DFS(深度优先搜索算法)——Java实现
基本概念深度优先搜索算法(Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。属于盲目搜索,最糟糕的情况算法时间复杂度为O(!n)。算法思想回溯法(探索与回溯法)是...原创 2020-03-14 19:32:58 · 9987 阅读 · 0 评论 -
(六)剑指offer 二叉树篇
文章目录1.重建二叉树题目答案2.二叉树的镜像题目答案3.从上往下打印二叉树(层次遍历)题目答案4.二叉树中和为某一值的路径(路径和)题目答案1.重建二叉树题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回...原创 2019-08-22 22:33:09 · 158 阅读 · 0 评论 -
(四)剑指offer 栈与队列篇
1.滑动窗口的最大值题目给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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...原创 2019-07-30 18:06:18 · 143 阅读 · 0 评论 -
(五)剑指offer 巧妙计算篇
文章目录#看前须知:1.二进制中1的个数题目答案2.求1+2+3+...+n题目答案#看前须知:机器数:一个数在计算机中的表现形式叫做机器数,这个数有正负之分,在计算机中用一个数的最高位(符号位)用来表示它的正负,其中0表示正数,1表示负数。例如:0000 0001表示十进制1, 1000 0001表示十进制-1真数:计算机中的机器数对应的真实的值就是真数,对最高位(符号位)后面的二进...原创 2019-08-17 09:36:04 · 301 阅读 · 0 评论 -
(三)剑指offer 链表篇
文章目录1.从尾到头打印链表题目答案2.链表中倒数第k个结点题目:答案:1.从尾到头打印链表题目输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。答案(1)采用额外空间栈:栈的功能就是先进后出,很适合这道题,但是要使用额外空间,一般情况下,使用额外空间的方法,再剑指offer上面是AC不过的。 /** * 用额外空间栈 * @param listNode *...原创 2019-07-25 16:27:59 · 177 阅读 · 0 评论 -
(二)剑指offer 字符串篇
1.正则表达式匹配题目请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式(也就是说两个字符串相等)。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。答案当模式中的第二个字符不是“”时:1、如果字符串...原创 2019-07-23 08:50:16 · 1274 阅读 · 0 评论 -
(一)剑指offer 数组篇
题目在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。答案这道题的考察点也就是在一个二维数组中查找指定的数是否存在。可以从数组的左下角来看,向右递增,向上递减,所以就可以从左下角开始查找,当要查的数比左下角小时上移,大时右移。package j...原创 2019-09-06 09:35:25 · 1627 阅读 · 1 评论 -
排序全家桶(Java实现)
对冒泡排序的一中改进,基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。控制一个数,让他和他后面的所有的数逐一比较,从而找到最小的(或者最大的),然后再将其赋值给这个数,完事后,再控制这个数的下一个数……插入排序的基本操作就是:将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序。原创 2019-09-06 09:35:14 · 995 阅读 · 0 评论 -
二叉树的实现
定义一个类,用来当做二叉树的节点,也可以用内部类package dateStructure;public class TNode { public int date; public TNode leftChild; public TNode rightChild; public TNode(int key) { this.date = key; }}下面是二叉树的实...原创 2019-08-18 13:11:55 · 124 阅读 · 0 评论 -
栈的实现及分析
下面这种方式用的是线性方式,也就是用数组实现的,也可以用链表:package dateStructure;public class IStack { private int[] array; private int maxSize; private int top; public IStack(int size){ this....原创 2019-07-24 17:21:39 · 240 阅读 · 0 评论 -
单向链表的实现
首先定义一个类,用来当做 节点类型:public class Node { int date; Node next; public Node(int value) { this.date = value; }}在定义一个类,用它开实现链表:public class IList { Node head = null; /** * 链表添加节点 * @...原创 2019-07-22 23:22:31 · 115 阅读 · 0 评论 -
数组的实现及分析
很简单的铁子,细心看吧:package dateStructure;public class IArray { public static void main(String[] args) { IArray iArray = new IArray(); iArray.add(1); iArray.add(2); iArray.add(3); iArray.add(4...原创 2019-07-22 23:19:41 · 153 阅读 · 0 评论 -
寻找两个有序数组的中位数
题目给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 +...原创 2019-07-10 16:20:37 · 94 阅读 · 0 评论 -
无重复字符的最长子串
题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke...原创 2019-07-10 00:22:33 · 157 阅读 · 0 评论 -
Java实现0-1背包问题
package com.hqq.procedure.test;/** * @author 作者:ILove996 * @version 创建时间:2020年5月21日 下午5:44:07 类说明 */public class Knapsack { private int[] weights; // 可供选择的重量 private boolean[] selects; // 记录是否被选择 public Knapsack(int[] weights) { this.weights =原创 2021-04-25 09:32:12 · 316 阅读 · 0 评论 -
序列计数
具体问题:【问题描述】小明想知道,满足以下条件的正整数序列的数量:1. 第一项为 n;2. 第二项不超过 n;3. 从第三项开始,每一项小于前两项的差的绝对值。请计算,对于给定的 n,有多少种满足条件的序列。【输入格式】输入一行包含一个整数 n。【输出格式】输出一个整数,表示答案。答案可能很大,请输出答案除以10000的余数。【样例输入】4【样例输出】7【样例说明】以下是满足条件的序列:4 14...原创 2020-03-25 15:31:25 · 791 阅读 · 0 评论 -
两数相加
题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的(个十百),并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> ...原创 2019-07-08 01:05:48 · 85 阅读 · 0 评论 -
两数之和
题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。(每个元素只用一次,当一个target值在nums数组中有多个目标值时,只返回一个就ok)示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[...原创 2019-07-07 22:59:48 · 121 阅读 · 2 评论