自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 两数相加

这段时间做得很吃力,得花一个月回头看一下复习了给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -&gt...

2020-04-12 23:41:07 134

原创 x的平方根

实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。来源:力扣(LeetCode)链接:https://leetcode-cn.com/...

2020-04-11 22:34:08 128

原创 杨辉三角

刚学c++时万恶的杨辉三角给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。class Solution { public List<List<Integer>> generate(int numRows) { ArrayList<List<Integer>...

2020-04-10 23:18:14 119

原创 加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。来源:力扣(L...

2020-04-09 23:10:10 73

原创 搜索插入的位置

int len = nums.length;if (len == 0) {return 0;} // 特判 if (nums[len - 1] < target) { return len; } int left = 0; int right = len - 1; while (left < right) { ...

2020-04-09 00:18:05 81

原创 KMP算法实现strStr()

实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “bba...

2020-04-07 21:15:47 152

原创 移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2...

2020-04-06 21:53:49 73

原创 有效的括号

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)...

2020-04-05 23:09:25 86

原创 罗马数字转整数

又是只想到了暴力方法,而且对于怎么处理IV等情况还参考了别人的评论,看到有个用贪心算法解决这题的,改天尝试一下罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D ...

2020-04-04 23:12:27 79

原创 回文数

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。进阶:你能不将...

2020-04-03 22:58:08 62

原创 整数反转

看了一下中等的。。。还是先从简单的开始做起吧给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么...

2020-04-02 22:49:10 60

原创 leetcode初体验----两数之和

算法学到后面感觉难度有些大,加上自己现在有些忙,先刷几个前面的简单题来加强理解,然后我发现哪怕最简单的题,也可以有多种多样的解法。给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], t...

2020-04-01 22:05:17 81

原创 Dijkstra算法

Dijkstra算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先),直到扩展到终点为止。算法过程太麻烦不写了,直接上代码理解。import java.util.Arrays;public class DijkstraAlgorithm { public static void main(String[] args) { ...

2020-03-31 20:18:19 104

原创 Kruskal算法

Kruskal算法也是用来求最小生成树的算法。基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路。感觉好难,五个小时了bug还没解决,代码先放在这儿,以后再改。package Kruskal;import java.util.Arrays;public class KruskalCase { private int edgeNum;// 边的个数 pri...

2020-03-30 22:15:52 209

原创 Prim算法

Prim算法求最小生成树,也就是在包含n个顶点的连通图中,找出只有(n-1)条边包含所有n个顶点的连通子图,也就是所谓极小连通图。思路看着有点长,不好理解,直接上代码吧。import java.util.Arrays;public class PrimAlgorithm { public static void main(String[] args) { // TODO Auto-g...

2020-03-29 21:40:49 91

原创 贪心算法

贪心算法是指在对问题进行求解时,在每一步中都采取最好或者最优的选择,从而希望能够导致结果是最好或者最优的算法。贪心算法所得到的结果不一定是最优的结果,但是相对近似最优解的结果。应用举例:集合覆盖问题。import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;public class Greed...

2020-03-28 21:07:28 110

原创 KMP算法

KMP算法利用之前判断过信息,通过一个next数组,保存模式串中前后最长公共子序列的长度,每次回溯时,通过next数组找到,前面匹配过的位置,省区了大量的计算时间。import java.util.Arrays;public class KMPAlgorithm { public static void main(String[] args) { // TODO Auto-gener...

2020-03-27 20:17:25 146

原创 动态规划算法

动态规划算法(Dynamic Programming)算法也是将大问题划分为小问题进行解决,与分治算法类似,但适用于动态规划求解的问题,经分解得到子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。动态规划可以通过填表的方式来逐步推进,得到最优解。这儿用背包问题演示一次。背包问题主要是指一个给定容量的背包、若干具有一定价值和重量的物品,如何选择物品...

2020-03-26 19:50:27 80

原创 基数排序法

1、基数排序属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或(bin sort),顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用。2、基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法。3、基数排序(Radix Sort)是桶排序的扩展。4、基数排序是这样实现的:将整数按位数切割成不同的数...

2020-03-25 19:59:14 234

原创 归并排序法

归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治策略。import java.text.SimpleDateFormat;import java.util.Date;public class MergetSort { public static void main(String[] args) { // TODO Auto-generated m...

2020-03-24 20:46:56 81

原创 快速排序法

快速排序是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。import java.text.SimpleDateFormat;import java.util.Date;public class Quick...

2020-03-23 18:02:04 73

原创 希尔排序法

希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本。基本思想:把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰好被分成一组,算法终止。import java.text.SimpleDateFormat;import java.util.Date;public class ShellSor...

2020-03-22 19:21:26 75

原创 插入排序法

插入排序的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。import java.text.SimpleDateFormat;import java.util.Date;public cl...

2020-03-21 19:25:51 114

原创 选择排序法

选择排序的基本思想是:第一次从arr[0]~arr[n-1]中选取最小值与arr[0]交换,第二次从arr[1] ~arr[n-1]中选取最小值与arr[1]交换。。。总共通过n-1次得到一个按排序码从小到大排列的有序序列。时间复杂度同样是O(n²),但由于交换操作的次数比冒泡少,故测试时实际使用时间比冒泡短。import java.text.SimpleDateFormat;import j...

2020-03-20 20:09:12 139

原创 冒泡排序法

冒泡排序的基本思想是:通过对待排序序列从前向后依次比较相邻元素的值,若逆序则交换,使值较大的元素从前移向后部。如果一趟下来没有进行过交换则说明序列有序,可以停止,减少不必要的比较。冒泡排序的时间复杂度是O(n²)import java.text.SimpleDateFormat;import java.util.*;//冒泡排序//如果逆序就交换public class BubbleS...

2020-03-19 18:40:19 101

原创 分治算法

分治算法可以求解的一些经典问题有:二分搜索、大整数乘法、棋盘覆盖、合并排序、快速排序、线性时间选择、最接近点对问题、循环赛日程表、汉诺塔。。。这儿以汉诺塔游戏示例:1)、如果是有一个盘,A→C如果我们有n>=2情况,我们总是可以看作是两个盘 :1、最下边的盘 2、上面的所有盘1)先把最上面的盘A→B2)把最下边的盘A→C3)把B塔的所有盘从B→Cpublic class Hano...

2020-03-18 19:52:36 78

原创 二分查找算法(非递归)

二分查找法的运行时间为对数时间O(log₂n)public class BinarySearchNoRecursion { public static void main(String[] args) { int[] arr = { 12, 15, 17, 42, 46, 100 }; int index = binarySearch(arr, 100); System.out.p...

2020-03-17 19:34:49 118

原创 图的广度优先遍历

广度优先遍历需要使用一个队列以保存访问过的结点的顺序,以便按顺序访问这些结点的邻接结点。步骤:(1)访问初始结点v并标记结点v为已访问。(2)结点v入队列。(3)当队列非空时继续执行,否则算法结束。(4)出队列,取得队头结点u。(5)查找结点u的第一个邻接结点w。(6)若结点u的邻接结点w不存在,则转到步骤3;否则循环执行以下三个步骤:6.1若结点w尚未被访问,则访问结点w并标记为...

2020-03-16 21:06:14 88

原创 图的深度遍历

所谓图的遍历,即是对结点的访问。每次都在访问完当前结点后首先访问当前结点的第一个邻接结点即深度优先遍历。算法步骤:(1)访问初始结点v,并标记结点v为已访问。(2)查找结点v的第一个邻接结点w。(3)若w存在,则继续执行4,如果w不存在,即回到第1步,将从v的下一个结点继续。(4)若w未被访问,则对w进行深度优先遍历递归(即把w当作另一个v,然后进行步骤123).(5)查找结点v的w邻...

2020-03-15 19:53:47 114

原创

图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。结点也可以称为顶点。图的表示方式有两种:二维数组表示(邻接矩阵);链表表示(邻接表)。这儿我使用二维数组表示了一张图。import java.util.*;public class Graph { private ArrayList<String> vertexList;// 存储顶点集合 pr...

2020-03-14 18:47:26 71

原创 平衡二叉树(AVL树)

平衡二叉树也叫做平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树,具有以下特点:它是一棵空树或它的左右两个子树的高度差绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。下面这段代码用左旋转和右旋转的方法构建了一个平衡二叉树public class AVLTreeDemo...

2020-03-13 17:21:22 118

原创 二叉排序树(BST(Binary Sort Tree))

对于二叉排序树的任何一个非叶子结点,要求左子结点的值比当前结点的值小,右子结点的值比当前结点的值大。如果有相同的值,可以将该结点放在左子结点或右子结点。在代码实现的过程中,注意删除的结点是叶子结点还是非叶子结点以及方法。在delRightTreeMin这个方法中个人有点小疑问,已经进行了删除操作的值还可以在该方法中return返回吗?public class BinarySortTreeDemo...

2020-03-12 19:03:01 163

原创 赫夫曼编码压缩实例

昨天只完成了赫夫曼编码表的生成实现,今天补了一些没有学过的知识,举出了一个压缩的实例,并将赫夫曼编码的方法封装。import java.util.*;public class HuffmanCode { public static void main(String[] args) { // TODO Auto-generated method stub String str = ...

2020-03-11 20:49:12 211

原创 赫夫曼编码

赫夫曼编码是一种无损编码,尽管生成的赫夫曼树不同,也不会有二义性,最后得到的编码可能会因为不同的赫夫曼树有所不同,但是得到的压缩编码长度是一样的,这里我们先以一个字符串为例生成其对应的赫夫曼编码表。import java.util.*;public class HuffmanCode { public static void main(String[] args) { // TODO...

2020-03-10 20:38:08 66

原创 赫夫曼树(Huffman Tree)

给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也叫做赫夫曼树。路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目成为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。结点的权及带权路径长度:若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结...

2020-03-09 18:27:14 97

原创 堆排序

堆排序是基于完全二叉树实现的,一个二叉树其父结点均大于子结点称为大顶堆,可以实现升序排序。堆顶的根结点就是整个序列的最大值,将其与末尾元素交换,末尾就成为最大值。然后将剩余n-1个元素重新构造成一个堆,重复上述操作即可得到升序排序。注意是从最后一个非叶子结点开始比较得到大顶堆。最后一个非叶子结点的序号为arr.length/2-1。import java.util.Arrays;publi...

2020-03-08 20:27:08 59

原创 线索化二叉树

每一个结点的左指针指向其左子结点或前驱结点,右指针指向其右子结点或后继结点,这样可以构成一个线索化二叉树。为了方便后续的操作,我们需要将其指针指向的两种类型区分开。同时在遍历的过程中,由于我们无法由子结点得到前驱结点或者父结点,需要一个pre结点保存遍历的前一个结点。public class ThreadedBinaryTreeDemo { public static void main(...

2020-03-07 18:16:22 119

原创 顺序存储二叉树的遍历

顺序存储二叉树一个结点下标为n,则其左结点的下标为2*n+1,右结点下标为2*n+2,一个结点的父结点下标为(n-1)/2,因此可以利用递归很容易的写出其遍历方式,这里给出前序遍历示例://顺序存储二叉树前遍历public class ArrBinaryTreeDemo { public static void main(String[] args) { int[] arr = { ...

2020-03-06 20:05:42 313

原创 二叉树

写了一个二叉树,可以完成增删查的功能,但不够完善,后续会进行改进。特别注意如果要对查找操作计数,注意计数的代码所在位置。另外有地方可以进行优化:例如在进行删除操作的时候,即便在对树的左结点遍历时完成了删除操作该代码仍然将右结点进行了遍历。class BinaryTreeDemo { public static void main(String[] args) { BinaryTree b...

2020-03-05 20:28:23 76

原创 写一个哈希表

增删改查操作需要在链表里写一个方法再在哈希表中写出,最后测试,第一次写仅实现增查功能,在输出方面有瑕疵。import java.util.Scanner;public class HashTabDemo { public static void main(String[] args) { HashTab hashTab = new HashTab(10); String key =...

2020-03-04 20:12:52 109

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除