自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 巨绕的字符算法题

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。数值(按顺序)可以分成以下几个部分:若干空格一个小数或者整数(可选)一个'e'或'E',后面跟着一个整数若干空格小数(按顺序)可以分成以下几个部分:(可选)一个符号字符('+' 或 '-')下述格式之一:至少一位数字,后面跟着一个点 '.'至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字一个点 '.' ,后面跟着至少一位数字整数(按顺序)可以分成以下几个部分:(可选)一个符号字符('...

2022-03-22 16:41:57 154

原创 数据结构双向链表记录贴

请你设计一个用于存储字符串计数的数据结构,并能够返回计数最小和最大的字符串。实现 AllOne 类:AllOne() 初始化数据结构的对象。inc(String key) 字符串 key 的计数增加 1 。如果数据结构中尚不存在 key ,那么插入计数为 1 的 key 。dec(String key) 字符串 key 的计数减少 1 。如果 key 的计数在减少后为 0 ,那么需要将这个 key 从数据结构中删除。测试用例保证:在减少计数前,key 存在于数据结构中。getMaxKey()

2022-03-16 15:24:57 1044

原创 字符串排序大小

输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个class Solution {public String minNumber(int[] nums) {String[]strs=new String[nums.length];//创建一个字符串数组for(int i=0;i<nums.length;i++){strs[i]=String.valueOf(nums[i]); //得到每个字符的值}Arrays.sort(strs,

2022-03-12 11:14:30 343

原创 字符串拼接运用StringBuilder

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行Z 字形排列。比如输入字符串为 "PAYPALISHIRING"行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);classSolu...

2022-03-01 15:02:15 632

原创 复杂链表的复制

请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。来源:剑指OfferclassSolution{publicNodecopyRandomList(Nodehead){if(head==null)returnnull; //判断头节点是否为空,如果空则空Nodecur=head; /...

2022-02-26 10:40:03 57

原创 煎饼排序的数据结构运用题

给你一个整数数组 arr ,请使用 煎饼翻转 完成对数组的排序。一次煎饼翻转的执行过程如下:选择一个整数 k ,1 <= k <= arr.length反转子数组 arr[0...k-1](下标从 0 开始)例如,arr = [3,2,1,4] ,选择 k = 3 进行一次煎饼翻转,反转子数组 [3,2,1] ,得到 arr = [1,2,3,4] 。以数组形式返回能使 arr 有序的煎饼翻转操作所对应的 k 值序列。任何将数组排序且翻转次数在10 * arr.length 范.

2022-02-19 10:22:21 211

原创 dfs解题思路详解

给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。返回网格中 无法 在任意次数的移动中离开网格边界的陆地单元格的数量。这是一道典型的dfs题,这里首先要确定拿到哪几个方向的深度优先;for(int j=0;j<n;j++){dfs(grid,0,j);dfs(grid,m-1,j);}for(int i=0;i&

2022-02-12 10:03:23 446

原创 dfs算法求解,图论题进行方向规划

public int getMaximumGold(int[][] grid) { //边界条件判断 if (grid == null || grid.length == 0) return 0; //保存最大路径值 int res = 0; //两个for循环,遍历每一个位置,让他们当做起点 //查找最大路径值 for (int i = 0; i < ...

2022-02-05 08:01:24 172

原创 Java解决单词断点搜索算法

句子仅由小写字母('a' 到 'z')、数字('0' 到 '9')、连字符('-')、标点符号('!'、'.' 和 ',')以及空格(' ')组成。每个句子可以根据空格分解成 一个或者多个 token ,这些 token 之间由一个或者多个空格 ' ' 分隔。如果一个 token 同时满足下述条件,则认为这个 token 是一个有效单词:仅由小写字母、连字符和/或标点(不含数字)。至多一个 连字符 '-' 。如果存在,连字符两侧应当都存在小写字母("a-b" 是一个有效单词,但 "-ab" 和 "

2022-01-27 13:32:50 131

原创 哈希表优先队列解决算法

给你一支股票价格的数据流。数据流中每一条记录包含一个 时间戳和该时间点股票对应的 价格。不巧的是,由于股票市场内在的波动性,股票价格记录可能不是按时间顺序到来的。某些情况下,有的记录可能是错的。如果两个有相同时间戳的记录出现在数据流中,前一条记录视为错误记录,后出现的记录 更正前一条错误的记录。请你设计一个算法,实现:更新 股票在某一时间戳的股票价格,如果有之前同一时间戳的价格,这一操作将更正之前的错误价格。找到当前记录里 最新股票价格。最新股票价格定义为时间戳最晚的股票价格。...

2022-01-23 22:29:42 146

原创 累加数的求解

累加数 是一个字符串,组成它的数字可以形成累加序列。一个有效的 累加序列 必须 至少 包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。给你一个只包含数字'0'-'9'的字符串,编写一个算法来判断给定输入是否是 累加数 。如果是,返回 true ;否则,返回 false 。说明:累加序列里的数 不会 以 0 开头,所以不会出现1, 2, 03 或者1, 02, 3的情况。来源力扣(LeetCode)class Solution { ...

2022-01-10 11:48:42 203

原创 栈的运用题

给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。请注意,返回的 规范路径 必须遵循下述格式:始终以斜杠 '/' 开头

2022-01-06 18:46:11 82

原创 数据库结构的索引底层结构的理解

目的是为了减少I-O流的多次浪费使用,当使用索引以后,需要执行无数次的表,拆解成一层一层的树,使用占用的I-O流会减少,这就是索引最终优化的意义所在,减少了表的遍历索引可以选择:二叉树,红黑树,hash,b-tree二叉树一般不选,因为他和不用索引造成的结果一样,一层只能两个,会很多层,也有很多次遍历红黑树不选是因为他会造成树高度过高,分支太多,造成查询变慢B-Tree 一般使用16K作为一行,进行IO流的处理,叶节点具有相同的深度,叶节点的指针为空,所有索引元素不重复,节点中的数据索引从左到右

2021-12-30 20:13:26 619

原创 2021-2022考研算法题详解

第42题,从100000个数中找出最小的10个数:送分题,堆(优先队列)排序秒杀,但注意要用大顶堆,这道题有要求时间、空间复杂度,用大顶堆时间复杂度O(n),空间复杂度O(1)。这道题的关键在于用堆去解决,普通Arrays.sort直接排序会让空间复杂度logn,时间复杂度nlogn,classSolution{publicint[]getLeastNumbers(int[]arr,intk){if(k==0||arr.length==0){return...

2021-12-29 11:52:25 540

原创 字典树的运用

前缀树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串,单词查找树,多叉树结构/给你一个 不含重复 单词的字符串数组 words ,请你找出并返回 words 中的所有 连接词 。连接词 定义为:一个完全由给定数组中的至少两个较短单词组成的字符串。这道题的题目第一想法就是字典树.字典树和深度遍历可以解决classSolution{privateNoderoot=newNode();//封装定义树的...

2021-12-28 17:05:59 514

原创 从字符串中简单的获取所需的数组

int size = list.size(); String[] ret = new String[size]; for (int i = 0; i < size; i++) { ret[i] = list.get(i); } return ret;设置size,另外创建一个新字符串ret,将ret值遍历得到集合中的元素,最后返回这个字符串数组在这个方法中可以进行简写,直接去返回需要的字符串retur...

2021-12-26 22:07:52 841

原创 层序遍历二叉树是否为奇偶树,DFS,BFS

BFS:class Solution { public boolean isEvenOddTree(TreeNode root) { Deque<TreeNode> bf= new ArrayDeque<>();//设置队列 boolean flag = true;//判断是否为偶数 bf.addLast(root);//加入根节点 while (!d.isEmpty()) { int ...

2021-12-25 11:01:14 373

原创 字符串哈希+前缀和

使用一个与字符串等长的哈希数组 h[],以及次方数组p[]。由字符串预处理得到这样的哈希数组和次方数组复杂度为 O(n)。当我们需要计算子串s[i...j]的哈希值,只需要利用前缀和思想h[j]-h[i-1]*p[j-i+1] 即可在O(1) 时间内得出哈希值(与子串长度无关)。classSolution{intN=(int)1e5+10,P=131313;//经验值int[]h=newint[N],p=newint[N];//创建哈...

2021-12-23 15:55:58 378

原创 有向图的理解运用

有向图最关键的一个概念是入度和出度的概念,入度,指的是指向该节点边的数量,出度,指的是从该节点出发的边的数量.产生有向的关系是什么?a指向b有先决条件,b指向a有先决条件.如下面这一简单题在一个小镇里,按从 1 到 n 为 n 个人进行编号。传言称,这些人中有一个是小镇上的秘密法官。如果小镇的法官真的存在,那么:小镇的法官不相信任何人。每个人(除了小镇法官外)都信任小镇的法官。只有一个人同时满足条件 1 和条件 2 。给定数组trust,该数组由信任对 trust[i] = [a.

2021-12-19 11:09:07 909

原创 记录算法学习贴

给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 'X' 或者是一个空位 '.' ,返回在甲板 board 上放置的 战舰 的数量。战舰 只能水平或者垂直放置在 board 上。换句话说,战舰只能按 1 x k(1 行,k 列)或 k x 1(k 行,1 列)的形状建造,其中 k 可以是任意大小。两艘战舰之间至少有一个水平或垂直的空位分隔 (即没有相邻的战舰)。来源:力扣(LeetCode)进阶:你可以实现一次扫描算法,并只使用O(1)额外空间,并且不修改..

2021-12-18 10:12:18 79

原创 滑动窗口解决数学问题

给你一个点数组 points 和一个表示角度的整数 angle ,你的位置是 location ,其中 location = [posx, posy] 且 points[i] = [xi, yi] 都表示 X-Y 平面上的整数坐标。最开始,你面向东方进行观测。你 不能 进行移动改变位置,但可以通过 自转 调整观测角度。换句话说,posx 和 posy 不能改变。你的视野范围的角度用 angle 表示, 这决定了你观测任意方向时可以多宽。设 d 为你逆时针自转旋转的度数,那么你的视野就是角度范围 [d -

2021-12-17 09:16:42 144

原创 拓扑排序的处理

重点在于加入入度为0的点,把前驱的边先去掉,进行处理/如何想到运用?需要用到,建立一个邻接表int n=quiet.length;int[]in=new int[in];List<Integer>list[]=new List[n];int[]ans=new int [n];for(int i=0;i<n;i++){list[i]=new ArrayList<>();ans[i]=i;如果一个问题中需要将比较类的二维数组进行有向比较,并且

2021-12-15 10:08:29 1406

原创 优先队列的运用

优先队列的默认是小根堆,相当于PriorityQueue<int[]>heap=newPriorityQueue<>((a,b)->a[0]-b[0])需要运用排序处理,与选择哪个之前,或者需要大的移除出堆,还是小的移除堆,如果需要把小的移除堆,那么只需要按默认的a[0]-b[0],如果需要把大的移出去,需要改成b[0]-a[0],这样会把小的下压,大的放到堆顶,直接用heap.poll()可以移除堆顶如果有双元素,默认会按第一个元素去排,就第一个数的下标进行减,如果.

2021-12-14 10:12:08 163

原创 map.getOrDefault()方法的使用

map.put(persons[i],map.getOrDefault(persons[i],0)+1);用来统计persons[i]出现的次数,如果出现persons[i],则执行0+1.否早null一般用于统计出现的总个数,进行判断classTopVotedCandidate{List<int[]>list=newArrayList<>();publicTopVotedCandidate(int[]persons,...

2021-12-13 11:36:09 1231

原创 挑选字符记录贴isLetter(c),toLowerCase(c)

大小写转换,找到字母的运用

2021-12-10 10:19:49 260

原创 滑动窗口记录贴(java)

滑动数组如何使用和通俗易懂的理解

2021-12-08 16:10:20 145

原创 记录优化遍历,for char a:toCharArray()用来截断数组

classSolution{publicStringtruncateSentence(Strings,intk){StringBuffer ba=newStringBuffer();//为了优化内存,用了字符串 缓存区for(chara:s.toCharArray()){//进行优化遍历,存储每个a字符进入遍历,省去了判断的时间if(a==''&&--k==0)break;sb.append(a);}ret...

2021-12-07 12:42:03 510

空空如也

空空如也

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

TA关注的人

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