自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 单调栈结构进阶问题

给定一个可能含有重复值的数组 arr,找到每一个 i 位置左边和右边离 i 位置最近且值比 arr[i] 小的位置。返回所有位置相应的信息。**与上一个单调栈问题一样。只不过这次在单调栈中存的不是数字。而是数组,其具体代码如下所示:在牛客上跑了一下只有75%;import java.util.*;import java.util.Arrays;public class Main{ public static void main(String [] args){ Scann

2020-09-01 21:12:54 217

原创 单调栈结构

单调栈结构给定一个不含有重复值的数组 arr,找到每一个 i 位置左边和右边离 i 位置最近且值比 arr[i] 小的位置。返回所有位置相应的信息。思路单看这个题目不做其他限制,很容易写出O(N平方)的思路,但这显然是不能满足大家的需求的,因此需要借助一个辅助结构,单调栈。可以实现O(N)的时间复杂度。具体步骤如下:1、当前栈为空时,遍历当前数组,push进去第一个数的索引;2、当前栈不为空时,单调栈,顾名思义,这里需要严格单调,即栈中索引所代表的数从栈顶到栈底是严格递减,当若当前获得索引所代表

2020-08-26 21:55:18 180

原创 生成窗口的最大值数组

import java.util.*;public class Main{ public static void main(String [] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int w = sc.nextInt(); int [] arr = new int[n]; for(int i=0;i<n;i++){

2020-08-26 20:41:38 160

原创 改编汉诺塔问题

改编汉诺塔问题汉诺塔问题比较经典,这里修改一下游戏规则:现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间。求当塔有n层的时候,打印最优移动过程和最优移动总步数。第一种使用递归的方式进行解题递归的方式,首先要找到递归的截止点,显然,改题目的截止点就是当我们只剩下一层的时候有多少种情况。当只有一层时有如下情况需要考虑:1、左中、中左、中右、右中2、左右、右左其代码片段如下所示: public static int getNumberProcess(

2020-08-23 18:42:11 514

原创 用一个栈实现另一个栈的排序

用一个栈实现另一个栈的排序思路构建一个辅助栈,当前栈的栈顶元素小于等于辅助栈的栈顶元素时,将当前栈的栈顶元素压入辅助栈;当前栈的栈顶元素大于辅助栈的栈顶元素时,将辅助栈的栈顶元素压入当前栈,直到当前栈的栈顶元素小于辅助栈的栈顶元素时,将其压入辅助栈。循环往复,知道当前栈为空,最后将辅助栈的元素压入当前栈。**import java.util.*;public class Main{ public static void main(String [] args){ Scan

2020-08-18 21:33:00 106

原创 仅用递归和栈操作逆序一个栈*

仅用递归和栈操作逆序一个栈思路通过一个递归函数获得栈最下面的元素并将其移除,最终不断获得剩余的最下面元素,再通过递归将这些元素压回去,得到一个逆序的栈。代码如下:import java.util.*;public class Main{ public static void main(String [] arg){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int

2020-08-15 16:19:03 118

原创 由两个栈组成的队列

由两个栈组成的队列思路两个栈,一进一出,即可实现队列的先进先出功能。但有三个点需要注意:1.输入栈中的元素导入输出栈时要将当前输入栈内所有元素丢入输出栈;2.当输出栈中有元素存在时,不能将输入栈元素导入输出栈;3.将输入栈元素导入输出栈可以写成一个方法,在队列的add、peek、poll方法中调用即可具体Java代码如下:import java.util.*;public class Main{ private Stack<Integer> s1; pri

2020-08-15 15:06:10 90

原创 设计一个有getMin功能的栈结构

设计一个有getMin功能的栈结构思路使用两个普通的栈结构进行实现,获取栈中最小元素的时间复杂度为一两个栈,一个s1存放全部元素,另一个s2存放当前栈中的最小元素push操作时,先判断s2是否为空,若为空或者当前压入栈的数比s2栈顶的数字要小,则直接push,否则不进行操作。而s2则直接进行push操作即可。pop操作时,先判断s1是否为空,若为空则两个栈都没有元素存在,不为空则则pop出s1的栈顶元素,并判断是否与s2栈顶元素相等,若相等,s2也进行pop操作。getMin操作时,则判

2020-08-15 14:26:44 84

原创 Manacher算法讲解与Java实现

Manacher算法原理该算法原型就是求解字符串中的最长回文子串,字符串的长度可能是技术或者偶数,所以首先要对字符串进行填充,例如“abc”变为“#a#b#c#”。算法中的三个要素1)回文半径数组(以当前字符为中心所形成回文字符串的半径大小所组成的数组)2)最右回文右边界(以当前字符为中心所形成回文字符串的最右边的字符的位置)3)回文右边界的中心如何求解回文半径数组如果对...

2018-12-07 21:56:39 235

原创 leetcode890 Java实现

leetcode890 Java实现题目思路想办法找个每个字符相对应的映射关系,在这里我把每个字符都映射成不同的数字,每个字符都对应一个数字,若目标字符串的字符对应的数字与输入字符串数组中的字符对映数字相等,则该字符串符合要求。Codeclass Solution {public List findAndReplacePattern(String[] words, Str...

2018-11-29 17:06:21 185

原创 Leetcode28 Java实现

Leetcode28 Java实现代码实现(kmp)class Solution { public int strStr(String haystack, String needle) { if(needle.length()&lt;1){ return 0; } ...

2018-11-23 16:20:32 292

空空如也

空空如也

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

TA关注的人

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