自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (1)
  • 收藏
  • 关注

原创 Leetcode题目分类指南(单独刷题或学习算法书籍配合使用)

Leetcode题目分类指南 笔者在学习《算法导论》同时,希望能够配合Leetcode的题目进行分类模块化练习,该分类为笔者自己根据做题学习经验,结合《算法导论》的内容,给出Leetcode题目分类。题目主要集中在Leetcode的前400题中,也包括有后面的一些经典值得刷的题。该题目分类按照算法和数据结构排版,即可供单独Leetcode刷题使用,也可以配合学习《算法导论》或者其他算法书籍...

2019-12-15 21:47:46 7080 2

原创 leetcode139单词拆分

题目描述:题解:方法1:暴力搜索最简单的实现方法是用递归去搜索。 针对一个字符串s,设它的任何一个子串是substr,如果substr在词典wordDict中出现过,那么返回一个true,然后将这个substr作为前缀的剩余部分回归调用。同时,如果某次函数调用中发现整个字符串都已经被拆分且在字典中出现过了,函数就返回true。代码:class Solution...

2019-12-22 11:59:51 182

原创 Leetcode62不同路径

题目描述:题解:很经典的动态规划题,令f(i,j)为从(1,1)走到地图中(i,j)位置时所有可能的路径数。则机器人走到(i,j)这个位置的上一步可能是从上方的一个格子(i-1,j)往下走一步而来,也有可能是从左边的一个格子(i,j-1)而来,所以路径之和的问题分为这两个子问题,状态方程为:f(i,j) = f(i-1,j)+f(i,j-1)特别地,由于当处于第一行和...

2019-12-21 23:46:24 164

原创 Leetcode279完全平方数(动态规划)

问题描述:分析:对于任意正整数n,其可表示为:代码为:class Solution { public int numSquares(int n) { int[] f = new int[n+1]; f[0]=0; for(int i=1;i<=n;i++) { f[i]=i;//极端情况,即i只由数字1构成和,此时个数最多,但...

2019-12-21 23:18:11 274 1

原创 《算法导论》第13章红黑树Java实现与详解

1. 什么是红黑树(1) 简介 在第12章中介绍了基本动态集合操作时间复杂度均为O(h)的二叉搜索树。但遗憾的是,只有当二叉搜索树高度较低时,这些集合操作才会较快;即当树的高度较高(甚至一种极端情况是树变成了1条链)时,这些集合操作并不比在链表上执行的快。 于是我们需要构建出一种“平衡”的二叉搜索树。红黑树(red-black tree)正是其中的一种。它...

2019-12-21 12:40:37 225

原创 《算法导论》第12章二叉搜索树Java实现

1.二叉树中的结点类Node,保存了树中一个结点的值,和它的父亲结点,左孩子结点与右孩子结点//二叉树中的结点类,保存了树中一个结点的值,和它的父亲结点,左孩子结点与右孩子结点public class Node { int key;//结点的值 Node p;//父亲结点 Node left;//左孩子结点 Node right;//右孩子结点 //添加一个构造方法,方便封装数值...

2019-12-18 22:27:46 114

原创 《算法导论》第15章动态规划最优二叉搜索树Java

import java.util.Scanner;public class OptimalBST { private double[] p; private double[] q; private int n; private double[][] e; private double[][] w; private int[][] root; public stati...

2019-12-17 13:12:01 793

原创 《算法导论》第15章动态规划最长公共子序列Java实现

首先定义一个给定序列的子序列,就是将给定序列中零个或多个元素去掉之后得到的结果,其形式化定义如下:给定一个序列X = <x1,x2,..., xm>,另一个序列Z =<z1,z2,..., zk> 满足如下条件时称为X的子序列,即存在一个严格递增的X的下标序列<i1,i2,..., ik>,对于所有j = 1,2,...,k,满足xij= zj,例如,Z...

2019-12-17 11:53:48 383

原创 《算法导论》第15章动态规划矩阵链乘法Java

import java.util.Scanner;public class MatrixChainOrder{ private static int n; private static int[][] m = new int[100][100]; private static int[][] s = new int[100][100]; private st...

2019-12-17 10:23:58 219

原创 《算法导论》第16章贪心算法赫夫曼编码java实现

1.字符结点类CharNode,用于封装一个字符的值和它出现的频率CharNode.java//字符结点类,用于封装一个字符的值和它出现的频率public class CharNode { private char c; private int freq; public CharNode(char c, int freq) { this.c = c; this.freq ...

2019-12-17 01:18:57 395

原创 《算法导论》第5章两种随机化数组方法Java实现

public class RandomArray { private static int[] arrayOne = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; private static int[] arrayTwo = new int[] { 1, 2, 3, 4, 5...

2019-12-14 22:58:46 238

原创 《算法导论》第9章中位数和顺序统计量Java

最小值和最大值:import java.util.Comparator;public class MiniMum { public static <T> T minimum(T[] t, Comparator<? super T> comparator) { T min = t[0]; for (int i = 1; i &...

2019-12-14 22:48:05 179

原创 《算法导论》第15章动态规划钢条切割问题Java实现

算法导论中讲解动态规划的一个很经典的例子,详细分析了朴素的递归、自顶向下动态规划的递归和自底向上的非递归动态规划,这三种思路之间的区别,并重构解。联系第22章:自顶向下动态规划的递归:就是子问题图的深度优先搜索自底向上的非递归动态规划:就是子问题图的逆拓扑排序代码实现:import java.util.ArrayList;import java.util.Arrays;i...

2019-12-14 22:12:08 519

原创 《算法导论》前两部分的排序算法总结

几个定义:1.稳定性:具有相同值的元素在输出数组中的相对次序与它们在输入数据中的相对次序相同。稳定性对带有卫星数据(除了需要排序元素外的附加元素)的元素至关重要,如对对象的排序,排序属性外要考虑副属性的先后次序。2.原址(In-place):如果输入数组中仅有常数个元素需要在排序过程中存储在数组之外,则称排序算法是原址的。...

2019-12-14 13:56:43 132

原创 《算法导论》第8章桶排序Java

import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.ListIterator;//桶排序,元素为[0,10)之间的实数public class BucketSort { public static void main(String[] a...

2019-12-14 13:36:38 231 1

原创 《算法导论》第2章希尔排序Java实现

import java.util.Arrays;public class ShellSort { public static void main(String[] args) { int a[] = {22,58,33,45,2,7,1,99,100}; System.out.println(Arrays.toString(a)); a=Shell_Sort(a);...

2019-12-14 12:52:47 128

原创 《算法导论》第2章选择排序Java实现

import java.util.Arrays;//选择排序public class SelectSort { public static void main(String[] args) { int[] a= {11,32,25,65,72,33,89,14,500,1,250}; System.out.println(Arrays.toString(a)); a=sel...

2019-12-14 12:50:59 81

原创 《算法导论》第2章冒泡排序Java实现

基础的排序之一import java.util.Arrays;public class BubblePopSort { public static void main(String[] args) { int[] a= {11,32,25,65,72,33,89,14,500,1,250}; System.out.println(Arrays.toString(a));...

2019-12-14 12:49:20 94

原创 《算法导论》第8章基数排序Java实现

前面的计数排序是基数排序的基础,思想是按照多个关键字(桶)对元素进行多轮的计数排序例如对三位数排序时,首先根据个位数进行计数排序,然后十位数,最后根据百分数,最后得到有序的序列import java.util.Arrays;//基数排序,以对三位数为例public class RadixSort { public static void main(String[] args) ...

2019-12-14 12:21:02 116

原创 《算法导论》第8章计数排序Java代码实现

//计数排序public class CountintSort { public static void main(String[] args) { int[] arr = {2,5,3,0,2,3,0,3}; System.out.println("数组arr为:"); for(int i:arr) { System.out.print(i+" "); } Sy...

2019-12-14 11:02:34 129

原创 《算法导论》第2章插入排序和归并排序Java代码实现

算法导论开始引入的两个最基本和经典的算法,用Java把伪代码实现了一遍,慢慢踩坑,动手一步步实现算法导论中和课后习题的代码。插入排序:public class InsertSort { //插入排序 public static int[] Insert_Sort(int[] a) { int key = 0; int i=0; for(int j=1;j<a.le...

2019-12-13 22:59:15 160

原创 《算法导论》第4章最大子数组Java实现

一个数组的最大子数组是指该数组的一个和最大的子数组最大子数组有三种分布情况: 1 最大子数组完全在数组的左半部 2 最大子数组完全在数组的右半部 3 最大子数组跨越数组的中间分布在左右半部,该情况又可分为1 2 3三种子情况其中前两种分布情况是和主问题相同的子问题,可以使用递归分治去解决,而第三种情况和主问题形式不同,需要考虑继续拆分为三...

2019-12-13 22:33:19 158

原创 《算法导论》第7章快速排序随机化版本Java实现

import java.util.Random;//快速排序的随机化版本,每次随机选取切分元素(主元)public class RandomQuickSort { public static void main(String[] args) { int a[] = {99,32,5,4,101,265,322,45,1,3}; a=Random_Quick_Sort(a)...

2019-12-13 22:17:24 144

原创 《算法导论》第7章快速排序Java代码实现

//快速排序,选取右边界元素为切分元素public class QuickSort { /* public static void main(String[] args) { int a[] = {99,32,5,4,101,265,322,45,1,3}; a=Quick_Sort(a); for(int i:a) { System.out.print(i+" ");...

2019-12-13 22:15:20 127

原创 《算法导论》第6章优先队列Java代码实现

最大优先队列类为://基于堆结构的最大值优先的优先队列public class MaxPrimaryQueue<Key extends Comparable<Key>>{ //用于保存堆的元素 private Key[] pq; //用于保存堆中目前存在的元素个数 private int heapsize=0; //构造方法,创建制定大小的优先队列...

2019-12-13 19:55:32 136

原创 《算法导论》第6章堆排序Java代码实现

//堆排序,数组下标从1开始为有效元素,a[0]为哨兵public class HeapSort { public static void main(String[] args) { int a[]= {1,3,5,9,2,4}; int[] b=HeapSort.HeapSort(a); for(int i:b) { System.out.print(i+" ");...

2019-12-13 18:48:51 144

Leetcode题目分类.docx

该分类为结合《算法导论》的内容,给出Leetcode题目分类。题目主要集中在Leetcode的前400题中,也包括有后面的一些经典值得刷的题。该题目分类按照算法和数据结构排版,即可供单独Leetcode刷题使用,也可以配合学习《算法导论》或者其他算法书籍(前三章题目分类的排版也考虑了《算法第4版》的顺序)当作编程练习使用,以便加深对数据结构和算法设计分析的理解。

2019-12-15

空空如也

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

TA关注的人

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