自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 测试对象等价

关系运算符==和!=可以用于所以对象之间比较 public class Equivalence { public static void main(String[] args) { Integer n1 = 47; Integer n2 = 47; System.out.println(n1 == n2); System.out.println(n1 != n2); } } 因为两个 Integer 对象相同,此时会输出tru

2020-08-12 16:23:38 88

原创 弗洛伊德算法及java实现

弗洛伊德算法介绍代码三级目录 算法介绍 我们用一个方阵储存图的信息,方阵的行列数为图的点数,矩阵中的数字为边的权重。 对于任何两个节点而言,i到j的最短距离存在两条路线: 1、从i直接到j 2、在i与j之间通过k中转,所以可以令k=1,2,3,…,n(n是顶点的数目),然后检查d(ij)与d(ik)+d(kj)的值;在此d(ik)与d(kj)分别是目前为止所知道的i到k与k到j的最短距离,因此d(ik)+d(kj)就是i到j经过k的最短距离。所以,若有d(ij)>d(ik)+d(kj),就表示从i出发

2020-07-30 20:34:09 475

原创 快速排序

快速排序 算法介绍 快速排序是对冒泡排序的一种优化,是一种采用了分治思想的交换排序。具体思想如下: 1、将数组第一个位置的数作为基准,使用双指针指向数组的两端,然后向中间扫描(注意:先从右往左扫描,这样两指针相遇的位置将是从右开始第一个小于基准的数,可以直接与基准交换)。 2、在从右往左的扫描中,如果发现有比基准小的数就停下来。 3、在从左往右的扫描中,如果发现有比基准大的数就停下来。 4、交换这两个数。 5、重复上述过程直到两指针相遇。 6、将两指针相遇的数与数列第一位的基准交换。(此时将固定基准在这个数

2020-07-04 17:35:27 103

原创 剑指 Offer 48. 最长不含重复字符的子字符串

最长不含重复字符的子字符串 问题描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,“p

2020-07-03 22:39:51 114

原创 优先队列

优先队列 介绍 优先队列是一种按照键值出队的队列,而不是像普通队列一样先进先出,后进后出。优先队列适合解决需要迅速找到找到最大值最小值的问题。 如果键值越小优先级越高,那么叫作升序优先队列;如果键值越大优先级越高则叫做降序优先队列。 优先队列的具体实现 用堆来实现优先队列,首先给出堆具有的属性和基础方法。 public class max_heap extends Comparable<E>>{ private Array<E> data; public max

2020-07-03 18:32:57 100

原创 堆排序

堆排序 算法介绍 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序。 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。 将堆的节点编号作为一维数组下标可以得到 如图所示,堆具有如下特征: 大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2] 小顶堆:arr[i] <= arr[2i+1] && arr

2020-07-02 21:08:36 62

原创 剑指 Offer 47. 礼物的最大价值

礼物的最大价值 问题描述 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 1: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 12 解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物 问题分析 很容易可以想到动态规划,假设dp[i][j]表示从左上角到(i,j)位置时礼物

2020-07-02 19:14:46 72

原创 剑指 Offer 46. 把数字翻译成字符串

把数字翻译成字符串 问题描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。 示例 1: 输入: 12258 输出: 5 解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, "mcfi"和"mzi" 分析 动态规划问题,可以注意到10~25这些数字,都可以拆分或组合在一起进行翻译。假设f

2020-07-02 18:44:22 75

原创 归并排序

归并排序 介绍 归并算法采取了分治的策略,类似完全二叉树,分是指将数组通过递归拆分成子序列,治是指将两个有序的子序列合并为一个有序序列。 代码 public class merge_sort{ public static void sort(int[] array){ int[] temp = new int[array.length];//在排序前,先建好一个长度等于原数组长度的临时数组,避免递归中频繁开辟空间 sort(arr,0,array.length-1,t

2020-07-01 18:27:09 101

原创 插入排序

插入排序 介绍 这是一个对少量元素进行排序的有效算法。它将被插入元素与已经排好序的元素从右往左以此对比,遇到比它大的元素则将该元素向后移动一位,知道找到合适的位置插入 java代码 void insert_sort(int[] array){ if(array == null || array.length == 0 || array.length == 1) return; int val,int index; for(int i = 1; i < array

2020-07-01 15:46:16 108 1

空空如也

空空如也

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

TA关注的人

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