![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习
文章平均质量分 61
迷糊弟弟
只有光头才能变强。
展开
-
牛客剑指offer66题汇总(三)
51.请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配public class Solution { public boolean match(cha...原创 2019-09-12 17:02:43 · 170 阅读 · 0 评论 -
单链表的快速排序 插入排序 选择排序
转载地址原创 2019-07-06 15:52:55 · 392 阅读 · 0 评论 -
非递归前序、中序、后序遍历二叉树
//前序遍历public void preOrderUnRecur(Node head){ if(head!=null){ Stack<Node> stack = new Stack<Node>(); stack.add(head); while(!stack.isEmpty()){ head = stack.pop(); System.out...原创 2019-07-06 12:48:07 · 104 阅读 · 0 评论 -
有一个链表,奇数位升序偶数位降序,如何将链表变成升序
public classOddIncreaseEvenDecrease { /** * 按照奇偶位拆分成两个链表 * @param head * @return */ public static Node[] getLists(Node head){ Node head1 = null; Node head2...原创 2019-07-06 11:20:20 · 2609 阅读 · 0 评论 -
写一个函数,找到一个文件夹下所有文件,包括子文件夹
importjava.io.File;public classCounter2 { public static void main(String[] args) { //取得目标目录 Filefile = new File("D:"); //获取目录下子文件及子文件夹 File[]files = file.listF...原创 2019-07-06 11:00:17 · 589 阅读 · 0 评论 -
其他进制与10进制的转换
10进制转换为其他进制 用:Integer.toString(int i,int radix)其他进制转换为10进制 用:Integer.parseInt(str,int radix)原创 2019-07-05 10:00:00 · 1723 阅读 · 0 评论 -
如何求有序数组绝对值最小的数
问题:有一个有序数组,如何求绝对值最小的数。形如:-10 -5 -2 7 15 20, 绝对值最小为-2思路:1。没有正数的情况下,最右边就是绝对值最小的2。没有负数的情况下,最左边就是绝对值最小的。3。有正数负数有0的情况下,找到04。只有正数负数的情况下,找到分界点public static int getMinAbsoluteValue(int[] a) { if(a ...原创 2019-07-13 22:58:00 · 953 阅读 · 0 评论 -
计算某一日期时是星期几 一年的第几天 第几周
public class Main{ public static void main(String [] args) throws Throwable { String a = dayForWeek("2019-1-6"); System.out.println("是"+a); } public static String dayForWeek(St...原创 2019-07-04 11:14:22 · 1558 阅读 · 0 评论 -
生成窗口最大值数组
题目:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,...原创 2019-07-03 23:08:14 · 210 阅读 · 0 评论 -
用一个栈实现另一个栈的排序
题目:实现一个栈的排序,只能申请一个辅助栈,不能用其他的数据结构?思路:原栈记为stack,辅助栈记为help,在stack上执行pop操作,弹出的元素记为cur。如果cur小于help的栈顶元素,则将cur直接压入help如果cur大于help的栈顶元素,则将help的元素逐一弹出并压入stack,知道cur小于或等于help的栈顶元素,再将cur压入help。public stati...原创 2019-07-03 22:00:16 · 147 阅读 · 0 评论 -
如何仅用递归函数和栈操作逆序一个栈
题目:一个栈一次压入1 2 3 4 5 ,那么从栈顶到栈底分别为 5 4 3 2 1,将这个栈逆序,只能用递归,不能用其他数据结构。思路:先设计一个递归函数得到栈底元素再设计一个递归函数,逆序一个栈代码实现:public class Main{ public static void main(String [] args) throws InterruptedException, ...原创 2019-07-03 21:43:47 · 130 阅读 · 0 评论 -
求一个字符串最长重复子串(Java版)
例如:例如字符串 s =“abcdeabc”输出:abc为何选用后缀?后缀字符串的前缀包含了字符串S的部分子串,只要求出字符串S的所有后缀就可间接的表示了S所有的子串解题思路保存s字符串的所有后缀对所有后缀进行排序(自然排序)比较排序后的相邻的后缀的最长公共子串(两个后缀从第一个字符开始的就相等得到公共子串),求出最长的公共子串**public class Main{ /...原创 2019-06-27 16:30:10 · 4263 阅读 · 0 评论 -
将一个数组数字按频率降序排序
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.ut...原创 2019-06-27 15:13:41 · 1404 阅读 · 0 评论 -
单链表部分逆置
输入一个链表,两个正数n,m表示逆置的范围,输出部分逆置后的链表public class Main { static class Node{ Node next; int val; public Node(int val) { this.val = val; } } public static void main(String [] str){ Node n1...原创 2019-08-23 16:12:47 · 278 阅读 · 0 评论 -
找到数组中距离目标值最近的数组下标
在一个非递减数组中,找到距离目标值,最近的数组索引。如 1 2 3 6 7 8 ,目标值为4返回 2思路:可以理解为 先用二分法找到这个目标值,如果找不到,那么就找它应该插入的顺序,判断插入顺序两边的元素谁和目标值近。public class Main { public static void main(String [] str){ int [] array = {1,5}...原创 2019-08-23 17:01:52 · 1851 阅读 · 2 评论 -
解压缩字符串
题目描述 猿辅导APP需要下发一些宣传文本给学生,工程师们使用了一种字符压缩算法,为了简单起见,假设被压缩的字符全部为大写字母序列,A,B,C,D,E……Z,压缩规则如下:1. AAAB 可以压缩为 A3B(单字符压缩不加括号)2. ABABA 可以压缩为 (AB)2A (多字符串压缩才加括号)输入数据保证不会出现冗余括号,且表示重复的数字一定合法且大于1,即不会出现:(A)2B --...原创 2019-08-20 10:59:14 · 1347 阅读 · 0 评论 -
用中序遍历和后序遍历,得到前序遍历
问题:给出一个二叉树的中序遍历和后序遍历结果,求前序遍历结果输出第一行:中序遍历结果第二行:后续遍历结果前序遍历结果样例输入:dgbaechfgbdehfca样例输出:adbgcefhimport java.util.*;public class Main{ static class TreeNode{ TreeNode left; TreeNode ri...原创 2019-09-12 15:46:27 · 529 阅读 · 0 评论 -
牛客剑指offer66题汇总(二)
31.输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。import java.util.ArrayList;import java.util.*;public class Solution { publ ·4tring PrintMinNumber(int...原创 2019-09-12 14:51:24 · 310 阅读 · 0 评论 -
牛客剑指offer66题汇总(一)
1.题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public class Solution { public boolean Find(int target, int [][] array) { if(array =...原创 2019-09-12 12:49:27 · 230 阅读 · 0 评论 -
二分查找类算法题
1.假设一个按升序排序的数组在您事先不知道的某个轴上旋转。假如{0,1,2,3,4,5,6,7}可能变为{4,5,6,7,0,1,2},你被给定一个值去搜索,如果找到返回这个值的下标,否则返回-1。假设数组中的数没有重复的,算法复杂度要达到logn.Example 1:Input: nums = [4,5,6,7,0,1,2], target = 0Output: 4Example 2:...原创 2019-09-10 14:52:46 · 149 阅读 · 0 评论 -
带障碍的迷宫路径问题
问题:一个二维矩阵n*m,中间有许多障碍点,从点(0,0)出发,问到达(n-1,m-1)所有的路径有多少条,障碍点不能经过。输入n m k,表示矩阵行列值以及障碍点的个数,接下来k行表示输入障碍点的位置。输出路径条数。public class Main{ static int res = 1; public static void main(String[] args) {...原创 2019-09-03 23:00:09 · 984 阅读 · 0 评论 -
找出数组中重复的数
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。统计数组中所有重复的数。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。public class Main { public static void main(String[] args) { ...原创 2019-08-31 18:13:35 · 219 阅读 · 0 评论 -
统计一个字符串包含另一个字符串的个数
例如:s1=“ababa”s2=“aba”s1中包含s2中子串的个数为2。第一种做法:就是直接循环遍历s1,每次在s1中裁剪s2长度的字符与s2比较,这种方式缺点是每次计数加1,效率太低。调用String 的indexOf可以统计出s2的初始位置,并且可以指定开始位置,可是开始位置如果每次加s2串的长度,如上,那么结果就是1,显然不对。调用这个方法就不能每次+1了,关键是下次的初始位置...原创 2019-08-30 21:58:54 · 3416 阅读 · 0 评论 -
字符串相乘
示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例 2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1 和 num2 的长度小于110。num1 和 num2 只包含数字 0-9。num1 和 num2 均不以零开头,除非是数字 0 本身。不能使用任何标准库的大数类型(比如 BigInteg...原创 2019-08-12 17:35:45 · 264 阅读 · 0 评论 -
求完全二叉树的最大深度与节点个数,要利用完全二叉树的特性
给定一棵完全二叉树的根节点root,返回这棵树的节点个数。如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法。给定树的根结点root,请返回树的大小。二分的思想。看完全二叉树的最后的最右一个节点的位置思路:1 找到完全二叉树的最左节点,也就是求左子树的深度2 找到完全二叉树头节点右子树中的最左节点,记录右子树深度3 如果两个深度相等,说明头节点左子树是一棵满二叉树,使用公式求...转载 2019-08-20 17:35:44 · 3757 阅读 · 0 评论 -
最短路径之迪杰斯特拉算法的Java实现
java实现迪杰斯特拉算法—转载转载 2019-08-24 14:44:31 · 347 阅读 · 0 评论 -
字典树学习
字典树是一种树形结构,优点是利用字符串的公共前缀来节约存储空间,比如加入“inn int tea ton"之后的字典树,如下:字典树的基本性质如下:根节点没有字符路径。除根节点外,每一个节点都被一个字符路径找到。从根节点到某一节点,将路径上经过的字符连接起来,为扫过的对应字符串。每个节点向下所有的字符路径上的字符都不同。问题如下:实现字典树结构,包含以下四个主要功能:void in...原创 2019-08-24 14:17:00 · 223 阅读 · 0 评论 -
将单链表的每K个节点之间逆序
链表 1 2 3 4 5输入 K=2 ,要反转成 2 1 4 3 5public Node reverse(Node head,int k) { if(head == null || k<2) return head; Node pre = null; //pre开始是K个节点中第一个节点的前一个节点 Node start = null;//start是K个节点的第一个节点...原创 2019-08-24 09:40:28 · 375 阅读 · 0 评论 -
计算某一天距离之前某一天相隔的天数
题目:第一行为一个整数n,接下来每一行为输入天数,输出该天距离2012年3月12日的天数输入:22012 3 132019 3 12输出:12556package cn.yu.test;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;impo...原创 2019-07-02 20:53:25 · 1936 阅读 · 0 评论 -
由两个栈组成的队列
题目:编写一个类,用两个栈实现队列,支持队列的基本操作。思路:选择两个栈,stackPush,stackPop,队列入队时,入stackPush栈,队列出队时,判断stackPop是否为空,不为空,直接在stackPop出栈,为空,则将stackPush栈中的所有元素全部添加到stackPop内,再出栈。代码如下:public class Main { public Stack...原创 2019-07-01 23:25:45 · 94 阅读 · 0 评论 -
leetCode85.最大矩形
给定填充0和1的2D二进制矩阵,找到仅包含1的最大矩形并返回其区域。Example:Input:[[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]Output: 6这题有点儿像leetcode中求直方图的最大矩形的区域(见下方链接),不过这题是二维的,...原创 2019-04-12 09:58:34 · 238 阅读 · 0 评论 -
Java中回溯问题的一般方法(子集,排列,回文分区)
1.求子集给定一组不同的整数,nums,返回所有可能的子集(幂集)。注意:解决方案集不得包含重复的子集。例子:Input: nums = [1,2,3]Output:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]代码如下:class Solution { public List<...原创 2019-04-02 22:23:34 · 557 阅读 · 0 评论 -
leetCoe31.下一个排序
问题:实现下一个排列,它将数字重新排列到字典上的下一个更大的数字排列。如果这种安排不可能,则必须将其重新排列为尽可能低的顺序(即按升序排序)。替换必须就地,并且仅使用常数的额外内存。举例:1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1public void nextPermutation(int[] nums) { int n = nums....原创 2019-04-11 21:38:05 · 123 阅读 · 0 评论 -
字符串操作之回文字符串 包含子字符串的最小窗口
1.给一个字符串,寻找最长的回文子串例如:输入babad 输出bab动态规划做,虽然不如“马拉车”方法算法复杂度低,但是好理解呀。建立一个boolean类型的数组 boolean[][] dp = new boolean[][];dp[i][j]表示第i个字符到第j个字符是否是回文子串1.如果i,j对应的字符相等,并且i,j之间的距离小于等于2.如aa,bb aba bcb这样的,显...原创 2019-04-11 21:12:58 · 124 阅读 · 0 评论 -
找出数组中出现次数大于n/2、n/3,n/k的数
1.找出数组中次数大于n/2的元素说明:算法空间复杂度o(n),时间复杂度o(1)数组中次数超过n/2的数最多1个,设置一个频率数,前一个数和后一个数相同,频率+1,否则-1,只要有数频率超过数组长度一半,最终这个频率肯定大于0.public static int solve2(int [] array) { if(array == null || array.length ==...原创 2019-04-11 17:45:10 · 1942 阅读 · 0 评论 -
括号算法题总结
1.去掉所有括号内的内容 public static void main(String[] args) { String dsr = "中国(合肥(安庆)蜀山)高校(jiaoyu)基地"; char[] dsrchar = dsr.toCharArray(); LinkedList dsrlist = new LinkedList<St...原创 2019-04-11 22:20:08 · 895 阅读 · 0 评论 -
旋转数组相关问题
1.把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:旋转数组有三种情况1.array[mid]>array[high] 34512 则最小元素在mid右侧 ...原创 2019-04-10 10:26:40 · 77 阅读 · 0 评论 -
矩阵顺时针逆时针旋转90°
在做矩阵旋转90°时,做的是顺时针旋转90°,但是想到了逆时针怎么做呢?这其中牵扯到对角线问题,主对角线好想,但是副对角线,自己还是想了一会儿?自己原来做的顺时针打印矩阵,用的循环遍历,其实还有一种旋转矩阵的做法。矩阵顺时针旋转90°1 2 3 4 5 6 7 8 9 ---第一步:上下颠倒矩阵7 8 94 5 ...原创 2019-03-31 15:50:46 · 3155 阅读 · 0 评论 -
leetcode接雨水等矩形区域问题
1.给定n个非负整数a1,a2,…,an,其中每个表示坐标(i,ai)处的点。 绘制n条垂直线,使得线i的两个端点位于(i,ai)和(i,0)。 找到两条线,它们与x轴一起形成一个容器,这样容器就含有最多的水。注意:您不会倾斜容器,n至少为2。上面的垂直线由数组[1,8,6,2,5,4,8,3,7]表示。 在这种情况下,容器可容纳的最大水面积(蓝色部分)为49。有没有和我一样傻的,第一次看...原创 2019-04-04 21:18:58 · 367 阅读 · 0 评论 -
快速排序算法与舍伍德快速排序算法
排序算法是比较常见的算法,道理也比较简单,双指针法。今天被朋友问了个舍伍德排序算法,也是快速排序那种形式。尴尬,第一次听说,特意学了一下。结合快速排序,写了三个方法。第一种: //不需要将基准值归位的快速排序public static void quickSort(int []a,int left,int right) { if(left>=right) return ; int ...原创 2019-03-26 21:22:26 · 3512 阅读 · 0 评论