算法与数据结构
zhumqs
这个作者很懒,什么都没留下…
展开
-
简单错误记录:根据Key或Value对Map进行排序及其应用
转载自:https://blog.csdn.net/justloveyou_/article/details/71658696 摘要: 我们知道,Map是 Java Collection Framework 的重要成员,也是我们最常用的容器类之一。Map的实现多种多样,包括HashMap、LinkedHashMap...转载 2018-08-18 10:27:17 · 150 阅读 · 0 评论 -
House Robber系列问题
aa原创 2019-05-21 12:36:06 · 506 阅读 · 0 评论 -
矩阵的最短路径和
题目给定一个矩阵m,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有路径中最小的路径和。例子:给定矩阵如下:1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0 路径1,3,1,0,6,1,0是所有路径中路径和最小的,所以返回12。思路1使用动态规划,定义 dp[M][N], M ,N 分...原创 2018-10-09 09:24:33 · 1005 阅读 · 0 评论 -
排序算法(10)------桶排序
桶排序原创 2018-09-03 15:01:04 · 410 阅读 · 0 评论 -
排序算法(9)------基数排序
基数排序的排序时间也可以达到线性,尤其在k和d(后面介绍该参数)很小的情况下。基数排序采取的是多关键字比较的策略,且每个关键字对排序的影响不同,根据关键字影响的主次,有两种排序方法:1、先根据影响最大的关键字来排序,而后在该关键字相同的情况下,再根据影响次之的关键字来排序,依此类推,直到最后按照影响最小的关键字排序后,序列有序。我们称这个为先高位后低位。2、先根据影响最小的关键字来排序...转载 2018-08-27 17:51:35 · 255 阅读 · 0 评论 -
排序算法(8)------计数排序
前言计数排序、基数排序和桶排序三种排序算法由于都不是基于比较的排序,因此这三种排序算法可以以线性时间运行。但是因为限制条件的特殊性,因此应用面没有基于元素比较的排序算法广,但是在很多特定的情况下还是蛮有用途的,而且效率极高。计数排序是建立在这样的前提条件下的:假设n个输入元素的每一个都是0到k区间内的一个整数,其中k为某个整数。因此我们后面所写的程序也只是针对0到k之间的元素进行排序,换句...转载 2018-08-27 17:42:54 · 236 阅读 · 0 评论 -
排序算法(7)------堆排序
前言堆排序、快速排序、归并排序的平均时间复杂度都为O(n*logn)。要弄清楚堆排序,就要先了解下二叉堆这种数据结构。本文不打算完全讲述二叉堆的所有操作,而是着重讲述堆排序中要用到的操作。比如我们建堆的时候可以采用堆的插入操作(将元素插入到适当的位置,使新的序列仍符合堆的定义)将元素一个一个地插入到堆中,但其实我们完全没必要这么做,我们有执行操作更少的方法,后面你会看到,我们基本上只用到了堆的...转载 2018-08-27 17:21:43 · 240 阅读 · 0 评论 -
排序算法(6)------快速排序
快速排序由于排序效率在同为 O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想——分治法也确实非常实用, 因此很多软件公司的笔试面试,包括像腾讯,微软等知名 IT 公司都喜欢考这个, 还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。快速排序是 C.R.A.Hoare 于 1962 年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(...原创 2018-08-27 16:55:56 · 302 阅读 · 0 评论 -
排序算法(5)------归并排序
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。归 //递归排序(归) public void m...原创 2018-08-27 16:39:15 · 149 阅读 · 0 评论 -
排序算法(4)------直接选择排序
直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接插入排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。设数组为a[0…n-1]。 1. 初始时, 数组全为无序区为 a[0..n-1]。 令i=0 2. 在无序区 a[i…n-1]中选取一个最小的元素,将其与a[i]交换。交换之后 a[0…...原创 2018-08-27 16:33:30 · 178 阅读 · 0 评论 -
排序算法(3)------希尔排序
希尔排序的实质就是分组插入排序, 该方法又称缩小增量排序,因 DL. Shell于 1959 年提出而得名。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的...原创 2018-08-27 16:24:11 · 324 阅读 · 0 评论 -
排序算法(2)------直接插入排序
直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。 设数组为 a[0…n-1]。 1. 初始时, a[0]自成 1 个有序区,无序区为 a[1..n-1]。 令 i=1 2. 将 a[i]并入当前的有序区 a[0…i-1]中形成 a[0…i]的有序区间。 3.i++并重复第二步...原创 2018-08-27 16:11:33 · 202 阅读 · 0 评论 -
排序算法(1)------冒泡排序
冒泡排序是非常容易理解和实现,以从小到大排序举例:设数组长度为N。 1. 比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。 2. 这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。 3. N=N-1,如果N不为0就重复前面二步,否则排序完成。冒泡排序1 //冒泡1 public void bubbl...原创 2018-08-27 16:03:47 · 263 阅读 · 0 评论 -
树状数组入门
文章转载自:https://blog.csdn.net/flushhip/article/details/791657011. 树状数组的问题模型首先我们搞明白树状数组是用来干嘛的,现在有一个这样的问题:有一个数组a,下标从0到n-1,现在给你w次修改,q次查询,修改的话是修改数组中某一个元素的值;查询的话是查询数组中任意一个区间的和,w + q < 500000。这个问题很常见...转载 2018-08-22 19:58:39 · 209 阅读 · 0 评论 -
线段树入门
文章转载自:[线段树从零开始](https://blog.csdn.net/zearot/article/details/52280189)一:为什么需要线段树?题目一:10000个正整数,编号1到10000,用A[1],A[2],A[10000]表示。修改:无统计:1.编号从L到R的所有数之和为多少? 其中1<= L <= R <=原创 2018-08-22 12:30:39 · 184 阅读 · 0 评论 -
网易校招编程题------最小难度唱歌
题目描述思路分析可以看出这是一道动态规划题 1. dp[i][j](假设一直有i > j)表示某一个人最近唱的音为第i个,另一个人最近唱的是第j个时最小的难度,由于只由一个人唱完肯定不是最优解。因此先在一个for循环内确定以下两种情况的初值 (1)dp[i][0]:第二个人唱第一个音,第一个人唱后面所有音 (2)dp[i][i-1]:第一个人唱最近的一个音,第二...原创 2018-08-18 10:28:47 · 255 阅读 · 0 评论 -
网易校招编程题------最多同时消灭怪物数目
题目描述思路分析:题目等价于,找一个十字架能够尽可能多的覆盖所有节点。 考虑到一根线至少能够覆盖到两个点,再加一根垂直于这条线至少能够覆盖3个点,在此基础上进行遍历。对任意三个点,我们选择其中两个点做一条直线(三种情况),对于第三个点,我们做一条垂线到这条直线上。这样的十字架已经经过了三个点。对于剩下的点,我们判断是否在这个十字架上。要判断是否在十字架上,首先判断是否和第一条直线在同...原创 2018-08-18 10:28:18 · 793 阅读 · 0 评论 -
网易校招编程题------最长公共子括号序列
题目描述思路分析:根据题意,要想使得 LCS 最大,删去任意一个字符即可获得 LCS = |s| - 1 ,再把该字符插到与原来不同的任意位置可以维持原长度,而不影响 LCS 的计算。因此最暴力的做法是枚举每个字符,把它插入到任意位置,判合法,去重,累计。优化 1 :插入是插到指定位置的字符之前,如果插入的字符和该位置的字符相同,则插入后还是原字符串,可以跳过这种情况。否则...原创 2018-08-18 10:27:49 · 339 阅读 · 0 评论 -
LeetCode关于回溯法相关问题的通用解法
A general approach to backtracking questions in Java (Subsets, Permutations, Combination Sum, Palindrome Partitioning)高度套路化DFSSubsets : https://leetcode.com/problems/subsets/public List<List<...原创 2019-05-18 14:25:01 · 258 阅读 · 0 评论