
数据结构与算法
文章平均质量分 63
Couragefff
沉迷于code无法自拔而日渐消瘦
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
2020.04.07网易笔试
第一题:求数列差的最大公约数题目描述:牛牛有一个长度为n的数组a,你要找到一个最大的正整数d,使得对于所有i(1<=i<=n),a[i+1]-a[i]是d的倍数。输入:第一行一个正整数n第二行n个正整数输出:若d不存在,输出-1,否则输出最大的d笔试时,忘了辗转相除法,没AC,看了网友思路后,写了如下代码,样例可过,不知能否ACclass Main1_2 { p...原创 2020-04-08 22:00:01 · 1264 阅读 · 4 评论 -
字符串类算法题---回文串、同构字符串、回文数、计数二进制子串
1.最长回文串力扣传送门 /* * 计算一组字符集合可以组成的回文字符串的最大长度 * */ public int longestPalindrome(String s) { if (s == null || s.length() == 0) return 0; int sMap[] = new int[128]; ...原创 2020-04-06 11:28:39 · 439 阅读 · 1 评论 -
数组、矩阵类算法题
一.移动零力扣传送门给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。 /* * 把数组中的 0 移到末尾 * */ public void moveZeroes(int[]...原创 2020-04-04 15:02:44 · 1202 阅读 · 0 评论 -
二分法---打开新思路
一.寻找重复数力扣传送门题目:给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。...原创 2020-04-04 10:14:42 · 362 阅读 · 0 评论 -
阿里笔试2020.3.23 第一题
当时没有做出来,现在写一写思路。题目:现有n个人,要从这n个人中选任意数量的人组成一只队伍,再在这些人中选出一名队长,求不同的方案对10^9+7取模的结果。如果两个方案选取的人的集合不同或选出的队长不同,则认为这两个方案是不同的。分析:因为选择过程与顺序无关,从n个不同元素中取出m个元素的组合数为c(n,m)。则总的方案数为1 * C(n,1)+2 * C(n,2)+3 * C(n,3)...原创 2020-04-02 11:59:52 · 1454 阅读 · 0 评论 -
判断二分图
判断二分图力扣传送门给定一个无向图graph,当这个图为二分图时返回true。如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边: gr...原创 2020-03-31 17:58:04 · 391 阅读 · 0 评论 -
并查集---冗余连接
冗余连接力扣传送门在本问题中, 树指的是一个连通且无环的无向图。输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u < v,表示连接顶点u 和v的无向图的边。返回一条可以删去的边,使得结果图...原创 2020-03-31 16:23:19 · 258 阅读 · 0 评论 -
拓扑排序类题目
1.课程安排的合法性力扣传送门题目:你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]]输出: true解释: 总共有...原创 2020-03-30 19:00:55 · 452 阅读 · 0 评论 -
搜索---回溯
Backtracking(回溯)属于 DFS。普通 DFS 主要用在 可达性问题 ,这种问题只需要执行到特点的位置然后返回即可。而 Backtracking 主要用于求解 排列组合 问题,例如有 { ‘a’,‘b’,‘c’ } 三个字符,求解所有由这三个字符排列得到的字符串,这种问题在执行到特定的位置返回之后还会继续执行求解过程。因为 Backtracking 不是立即返回,而要继续求解,因...原创 2019-11-15 10:25:07 · 329 阅读 · 0 评论 -
搜索---深度优先搜索
深度优先搜索在得到一个新节点时立即对新节点进行遍历从一个节点出发,使用 DFS 对一个图进行遍历时,能够遍历到的节点都是从初始节点可达的,DFS 常用来求解这种 可达性 问题。在程序实现 DFS 时需要考虑以下问题:栈:用栈来保存当前节点信息,当遍历新节点返回时能够继续遍历当前节点。可以使用递归栈。标记:和 BFS 一样同样需要对已经遍历过的节点进行标记。1. 查找最大的连通面积/*...原创 2019-11-15 10:10:05 · 182 阅读 · 0 评论 -
搜索---广度优先
广度优先搜索一层一层地进行遍历,每层遍历都以上一层遍历的结果作为起点,遍历一个距离能访问到的所有节点。需要注意的是,遍历过的节点不能再次被遍历。每一层遍历的节点都与根节点距离相同。设 di 表示第 i 个节点与根节点的距离,推导出一个结论:对于先遍历的节点 i 与后遍历的节点 j,有 di <= dj。利用这个结论,可以求解最短路径等 最优解 问题:第一次遍历到目的节点,其所经过的路径为最...原创 2019-11-15 09:55:12 · 218 阅读 · 0 评论 -
动态规划---字符串编辑问题
1.编辑距离 /* * 最小编辑代价 * */ public int minCost(String str1,String str2,int ic,int dc,int rc){ if(str1==null||str2==null) return 0; char s1[]=str1.toCharArray(); char...原创 2019-11-14 16:32:05 · 319 阅读 · 0 评论 -
动态规划---股票交易问题总结
1.股票交易—需要冷却期 /* * 题目:需要冷却期的股票交易 * 题目描述:交易之后需要有一天的冷却时间。 * */ public int maxProfit(int[] prices) {//方案一 if(prices==null||prices.length==0||prices.length==1) return 0; ...原创 2019-11-14 15:55:20 · 395 阅读 · 0 评论 -
动态规划---序列问题(最长公共,最长递增,最长公共递增,最长数对,最长摆动)
1.最长递增子序列 /* * 最长递增子序列 * */ public int lengthOfLIS(int[] nums) {//方案一:时间复杂度0(N^2) int n = nums.length; if (n == 0) return 0; int dp[] = new int[n];//dp[i]表示以i元素...原创 2019-10-22 10:29:17 · 302 阅读 · 0 评论 -
动态规划---背包问题总结
背包问题:有一个容量为 N 的背包,要用这个背包装下物品的价值最大,这些物品有两个属性:体积 w 和价值 v。定义一个二维数组 dp 存储最大价值,其中 dp[i][j] 表示前 i 件物品体积不超过 j 的情况下能达到的最大价值。设第 i 件物品体积为 w,价值为 v,根据第 i 件物品是否添加到背包中,可以分两种情况讨论:第 i 件物品没添加到背包,总体积不超过 j 的前 i 件物品的最...原创 2019-10-20 23:20:13 · 458 阅读 · 0 评论 -
递归、分治
最接近点对题目描述:在二维空间内找到两个距离最近的点思路:选取一垂直线l: x = m来作为分割直线,其中m为S中各点x坐标的中位数。将S分割为S1和S2。递归地在S1和S2上找出其最小距离d1和d2,并设d = min{d1, d2},S中的最接近点对是d,或者是某个{p, q},其中p∈S1且q∈S2。候选点 p 和 q 到直线l 的距离不能超过d,则只需考虑区间P1和P2的范...原创 2019-10-09 23:16:41 · 283 阅读 · 0 评论 -
排序类算法阶段性总结
1.快速排序 /* * 快速排序 * 不稳定:在一个待排序队列中,A和B相等,且A排在B的前面,而排序之后,A排在了B的后面.这个时候,我们说这种算法是不稳定的. * */ public void fastSort(int a[], int start, int end) { if (start >= end) return; ...原创 2019-10-08 23:00:15 · 259 阅读 · 0 评论 -
贪心算法--常见问题总结
什么是贪心算法?贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。贪婪算法所得到的结果往往不是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。贪心解决问题的基本思路?1.建立数学模型来描述问题2.把求解的问题分成若干个子问题3.对每一子问题求解,得到子问题的局部最优解4.把子...原创 2019-10-02 13:26:16 · 2398 阅读 · 0 评论 -
在一个有重复元素的数组中查找 key 的最左(右)位置
package leetcode;import org.testng.annotations.Test;/** * Created by fangjiejie on 2019/9/21. */public class BinarySearch { @Test public void test() { int a[] = {1, 2, 3, 4, 4,...原创 2019-09-21 19:54:31 · 594 阅读 · 0 评论 -
简单背包---递归
解题思路:对每一个物品有两种选择,要或者不要(1/0),从第一个物品一直遍历到最后一个物品,一共有2的n次方种组合方式,对每一种组合判断是否符合携带条件。代码:package homeWork.SeatWork1;import java.util.Scanner;/** * Created by fangjiejie on 2019/9/19. */public class ...原创 2019-09-20 10:51:54 · 691 阅读 · 0 评论 -
洗牌算法
洗牌算法怎样才够乱? 一副扑克54张牌,有54!种排列方式。你所给出的洗牌算法,应该能够等概率地生成这54!种结果中的一种。 一般方法: 1.利用一个List 2.每次从数组中,随机找到一个数;若该数没有被选择过,那么就将它放入List中;如果被选择过,就重新随机 3.时间复杂度O(n*n) 优化洗牌算法:...原创 2018-05-23 21:01:09 · 532 阅读 · 0 评论 -
泉水——深搜
泉水 Description Leyni是一个地址调查员,有一天在他调查的地方突然出现个泉眼。由于当地的地势不均匀,有高有低,他觉得如果这个泉眼不断的向外溶出水来,这意味着这里在不久的将来将会一个小湖。水往低处流,凡是比泉眼地势低或者等于的地方都会被水淹没,地势高的地方水不会越过。而且又因为泉水比较弱,当所有地势低的地方被淹没后,水位将不会上涨,一直定在跟泉眼一样的水位上。 由原创 2016-04-16 10:43:05 · 904 阅读 · 0 评论 -
队列、优先队列的学习
队列定义:队列是限定只能在表尾进行 插入,在表头进行删除的线性表 队尾——允许插入的一端 队头——允许删除的一端 队列的定义#include//头文件 using namespace std; //需要加上使用名称 空间,和sort()排序函数是一样的。 queue q; //格式:queue 对象。原创 2016-04-22 19:47:37 · 485 阅读 · 0 评论 -
水题——优先队列
Description 因为是有关于接水的问题,便简称为水题了(。 N个人排队在M个出水口前接水,第i个人接水需时为t[i], 请问接水的最短用时是多少? Input 第一行一个整数 T ,代表有 T 组数据。 每组数据 第一行两个整数 N(<=100000) , M(<=10000) 代表有 N 个人 M 个出水口。 第二行N个整数,第i个数字ti代表第i个人接水用时t[i]。 Outpu原创 2016-04-20 21:32:26 · 679 阅读 · 0 评论 -
栈的学习
栈 定义:限定仅在表尾进行插入或删除 操作的线性表。 允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)。不含元素的空表称空栈。 栈的定义#include using namespace std; //需要加上使用名称 空间,和sort()排序函数是一样的。 stack s; //格式:stack <类型名> 对象。原创 2016-04-22 19:30:26 · 435 阅读 · 0 评论 -
并查集——How Many Tables
小明马上要过生日,要邀请N个好友,而他的好友都只愿意和认识的人坐,给出朋友之间的认识关系,假设所有认识的人坐一桌,问最少需要多少桌子。 规定:若A认识B,B认识C,则A认识C,则ABC全部认识,可以坐一桌; 例如:小明的好友为 A B C D E 五人,关系式 A-B B-C D-E。则此时需要两个桌子:ABC一桌,DE一桌。 输入N表示好友人数,M表示关系数,接下来M行显示所有关系。原创 2016-04-07 21:43:34 · 654 阅读 · 0 评论 -
并查集初学——围巾的纠结
围巾的纠结 Description 小破想要织一条围巾,可是她并不擅长于织围巾。由于工作太忙,每天她都只能织一点。为了快速的织完围巾,她决定直接把毛线球连在一起。围巾上有球球还是非常可爱的嘛~ 于是小破去商店买了n个毛线球。每天晚上睡觉之前,她就抽出一点时间,把其中两个原本分开的毛线球织在一起。由于是睡觉之前干活,人太困了,过了m天之后,她发现自己完全织乱了,于是她决定拆掉重织。可是由于她的织法原创 2016-04-07 21:35:34 · 583 阅读 · 0 评论 -
并查集初学——吸血鬼
吸血鬼 Description Remilia是《东方红魔馆》中首次亮相的吸血鬼角色,是有着500岁年龄的吸血鬼领主。作为红魔馆的主人,有着高贵和威严的气质,不过也经常任性和孩子气。关于吸血鬼有很多传说。吸血鬼是一个血族,有着严格的等级。吸血鬼会严格听从血之主人的命令。因此吸血鬼中的真祖可以以血之盟约命令足下的所有家臣。 如今在某地出现了一只吸血鬼,凡是跟吸血鬼解除的人,都有可原创 2016-04-07 21:31:36 · 592 阅读 · 0 评论 -
并查集初学——病毒
病毒 Description 某种病毒袭击了某地区,该地区有N(1≤N≤50000)人,分别编号为0,1,…,N-1,现在0号已被确诊,所有0的直接朋友和间接朋友都要被隔离。例如:0与1是直接朋友,1与2是直接朋友,则0、2就是间接朋友,那么0、1、2都须被隔离。现在,已查明有M(1≤M≤10000)个直接朋友关系。如:0,2就表示0,2是直接朋友关系。 请你编程计算,有多少人要被隔离。原创 2016-04-07 14:52:27 · 624 阅读 · 0 评论 -
泉水——广搜
泉水 Description Leyni是一个地址调查员,有一天在他调查的地方突然出现个泉眼。由于当地的地势不均匀,有高有低,他觉得如果这个泉眼不断的向外溶出水来,这意味着这里在不久的将来将会一个小湖。水往低处流,凡是比泉眼地势低或者等于的地方都会被水淹没,地势高的地方水不会越过。而且又因为泉水比较弱,当所有地势低的地方被淹没后,水位将不会上涨,一直定在跟泉眼一样的水位上。 由原创 2016-04-16 10:54:03 · 1056 阅读 · 0 评论 -
oil deposits——深搜
Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 22313 Accepted Submission(s): 12865Problem Description The GeoSurvComp geolog原创 2016-04-16 19:31:44 · 516 阅读 · 0 评论 -
链表中是否有环?如果有找到入口结点
1.简单思路做法 首先从头节点开始,依次遍历单链表的每一个节点。每遍历到一个新节点curNode,就从头节点重新遍历新节点之前的所有节点,看是否有与curNode相同的结点。 时间复杂度O(n*n);空间复杂度O(1) 2.用HashSet存储。 建立泛型为结点类型的HashSet,用来存储曾经遍历过的结点。如果新存入的结点发现hashSet中已存在该节点。则说明链表中有环。 时间复杂度...原创 2018-05-23 18:05:58 · 345 阅读 · 0 评论 -
用Java解决约瑟夫环问题
package com.lyf.linkList;/** * Created by fangjiejie on 2017/4/19. */public class Josephus<T> { int n;//共有n个人 int m;//数到m淘汰 Node head=null; Node tail=null; class Node<T>{原创 2017-04-19 19:45:42 · 941 阅读 · 0 评论 -
Kinds of Fuwas ——zoj 2975
In the year 2008, the 29th Olympic Games will be held in Beijing. This will signify the prosperity of China as well as becoming a festival for people all over the world. The official mascots of Beijing原创 2016-04-19 12:16:35 · 702 阅读 · 0 评论 -
蓝桥杯-第七届省赛javaA组-剪邮票
剪邮票如【图1.jpg】, 有12张连在一起的12生肖的邮票。 现在你要从中剪下5张来,要求必须是连着的。 (仅仅连接一个角不算相连) 比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。请你计算,一共有多少种不同的剪取方法。请填写表示方案数目的整数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 p原创 2017-04-05 20:34:35 · 1119 阅读 · 0 评论 -
Give Me the Number------字符串处理
Numbers in English are written down in the following way (only numbers less than 109 are considered). Number abc,def,ghi is written as “[abc] million [def] thousand [ghi]”. Here “[xyz] ” means the writ原创 2016-04-18 18:17:58 · 599 阅读 · 0 评论 -
Rescue——广搜、优先队列
Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M <= 200) matrix. There are WALLs, ROADs, and GUARDs in the prison.Angel’s原创 2016-04-22 18:54:12 · 480 阅读 · 0 评论 -
Red and Black——深搜
Problem Description There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacen原创 2016-04-19 13:08:58 · 727 阅读 · 0 评论 -
oil deposits——广搜
Oil Deposits Problem Description The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSurvComp works with one large rectangular region of land at a time原创 2016-04-16 20:16:33 · 656 阅读 · 0 评论 -
并查集 —— 畅通工程
畅通工程Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? Input 测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数原创 2016-04-07 14:43:48 · 441 阅读 · 0 评论