- 博客(16)
- 收藏
- 关注
原创 LeetCode(Java)经典题之螺旋矩阵(54、59)
螺旋矩阵这名真的起的无比高大上,以至于我产生了畏难情绪,但当我点开题目的时候,就这????就这就这????第59题:给你一个正整数n,生成一个包含1到n2所有元素,且元素按顺时针顺序螺旋排列的n x n正方形矩阵matrix。所以思路就来了(因为我看了答案),这一个n*n的矩阵,当然需要用到二维数组来存储,所以定义一个二维数组来接收是必须的,而又如何做到题目所说的顺时针打印呢?我们模拟一下打印的流程,首先从左往右打印第一行,接着从上往下打印最后一列,然后从右往...
2022-04-07 08:26:41
368
原创 LeetCode(Java)经典题之滑动窗口法(76、209、904)
滑动窗口法一般用来处理子数组长度的问题,也需要用到两个指针,通过两个指针的移动,来确定子数组的范围。由于两个指针在不停的移动,子数组的范围也在不停变化,类似于滑动的窗口,所以叫做滑动窗口法。废话少说,看题来理解。第209题:给定一个含有n个正整数的数组和一个正整数 target。找出该数组中满足其和≥ target的长度最小的连续子数组[numsl, numsl+1, ..., numsr-1, numsr],并返回其长度。如果不存在符合条件的子数组,返回 0 。假定我们的target
2022-04-04 22:11:47
1053
原创 LeetCode(Java)经典题之双指针法(26、27、283、844、977)
快慢指针到底是个啥捏,别急,先看27题:给你一个数组 nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素想起来好像挺容易的,找到要删除的val,把对应数组里的值删掉就好了。可是数组的元素在内存地址中是连续的,没有办法进行删除操作,只能进行覆盖。为了完成题目要求的操作,我们采用快慢指针(双指针)的方法,具体的过程
2022-04-03 22:36:01
619
原创 LeetCode(Java)经典题之二分法(34、35、69、367、704)
近期参照《代码随想录》开始刷LeetCode,所以写点笔记来给自己总结,顺便复习。先从第704题来了解一下二分法吧:给定一个n个元素有序的(升序)整型数组nums和一个目标值target, * 写一个函数搜索nums中的 target,如果目标值存在返回下标,否则返回 -1。首先注意题目要求:有序数组、无重复元素,就立马想到二分法。此处的二分法实现又有两种方法,一种是[left,right]闭区间,一种是[left,right)开区间。根据个人理解方式的不同,在此我选择用第一种...
2022-04-03 13:24:34
592
原创 数据结构(JAVA)—— 递归(八皇后问题-回溯算法)
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。思路分析1)第一个皇后先放第一行第一列2)第二个皇后放在第二行第一列、然后判断是否OK, 如果不OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适3)继续第三个皇后,还是第一列、第二列……直到第8个皇后也能放在一个不冲突的位置,算是找到了一个正
2021-12-21 15:07:26
589
2
原创 数据结构(JAVA)—— 递归(迷宫问题)
现有一个简易迷宫,如图所示,需要小球从指定位置开始,走到箭头所在位置接下来是代码实现部分package com.sanjin.study;/** * @author sanjin * @create 2021-12-20 21:25 */public class MiGong { public static void main(String[] args) { //创建一个二维数组表示迷宫 int[][] map = new int[8][7
2021-12-21 11:42:21
673
原创 数据结构(JAVA)—— 递归
简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。下面我们来看一段简单的递归代码:我心中的大喜,这可太简单了。n=4,进入if循环,执行test(3),顺道打印“n=4”n=3,进入if方法体,执行test(2),顺道打印“n=3”n=2,不进入if方法体,直接打印“n=2”所以最后的结果绝壁是n=4,n=3,n=2。我大喜。然而我错了,先公布正确答案:n=2,n=3,n=4。为了强化自己记忆,同时帮助跟我
2021-12-20 20:27:38
745
原创 数据结构(JAVA)—— 逆波兰计算器(后缀表达式)
在实现逆波兰计算器之前,我们需要掌握如何将计算式转为后缀表达式个人感觉《大话数据结构》讲得很形象,放在这里供大家理解。学会了之后,我们来看一下需要实现的内容:完成一个逆波兰计算器,要求完成如下任务:1)输入一个逆波兰表达式(后缀表达式),使用栈(Stack), 计算其结果2)支持小括号和多位数整数,因为这里我们主要讲的是数据结构,因此计算器进行简化,只支持对整数的计算。以下为代码实现部分:package com.sanjin.study;import java...
2021-12-20 13:33:59
192
原创 数据结构(JAVA)—— 栈实现综合计算器(中缀表达式)
使用栈来实现综合计算器-自定义优先级[priority]思路分析:1. 通过一个index值(索引),来遍历我们的表达式2.如果发现是一个数字,就直接入栈3.如果发现是一个符号,就分如下情况(1)如果发现当前的符号栈为空,直接入栈(2)如果符号栈有操作符,就进行比较 1)当前操作符的优先级小于等于栈中操作符的优先级 从数栈中pop出两个数,从符号栈中pop出一个符号,进行运算,结果入数栈,再将当前运算 符入符号栈; ...
2021-12-20 10:37:19
484
原创 数据结构(JAVA)—— 栈的简单操作
1.栈的英文为(stack)2.栈是一个先入后出(FILO-First In Last Out)的有序列表。3.栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。4.根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除5.5)出栈(pop)和入栈(push)的概念(如图所示).
2021-12-19 20:10:11
157
原创 数据结构(JAVA)—— 单向环形链表
单向环形链表:将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表成为单向环形链表。Josephu(约瑟夫、约瑟夫环) 问题Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。提示:用一个不带头结点的循环链表来处理Josephu 问题:先构成...
2021-12-19 17:09:10
291
原创 数据结构(JAVA)—— 双向链表的创建与增删改
使用带head头的双向链表实现 –水浒英雄排行榜管理单向链表的缺点分析:1)单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。2)单向链表不能自我删除,需要靠辅助节点 ,而双向链表,则可以自我删除,所以前面我们单链表删除时节点,总是找到temp,temp是待删除节点的前一个节点(认真体会).双向链表与单向链表的异同:(1)遍历:和单向链表无区别(2)添加:默认添加到双向链表的末尾 1)先找到双向链表的最后节点 2)temp.nex...
2021-12-19 15:09:51
332
原创 数据结构(JAVA)—— 单链表的常见面试题
单链表的常见面试题有如下:1)求单链表中有效节点的个数2)查找单链表中的倒数第k个结点 【新浪面试题】3)单链表的反转【腾讯面试题,有点难度】4)从尾到头打印单链表 【百度,要求方式1:反向遍历 。 方式2:Stack栈】下面用代码逐一实现问题一:求单链表中有效节点的个数此题较为简单,声明一个方法即可//返回链表的有效长度,如果有头结点就忽略 public static int getLength(HeroNode head){ if(head.ne
2021-12-19 11:25:51
660
原创 数据结构(JAVA)—— 单链表的创建及增删改
链表是有序的列表,但是它在内存中是存储如下1)链表是以节点的方式来存储,是链式存储2)每个节点包含 data 域, next 域:指向下一个节点.3)如图:发现链表的各个节点不一定是连续存储.4)链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定实战演示:使用带head头的单向链表实现 –水浒英雄排行榜管理1)完成对英雄人物的增删改查操作2)不考虑序号,直接添加到链表的尾部package com.sanjin.study;/** * @author sa
2021-12-18 20:20:14
772
原创 数据结构(JAVA)—— 数组实现队列
队列介绍队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front及 rear分别记录队列前后端的下标,front 会随着数据输出而改变,而 rear则是随着数据输入而改变,如图所示:代码实现:出队列操作getQueue显示队列的
2021-12-18 16:11:53
334
原创 数据结构(JAVA)—— 稀疏数组
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:1)记录数组一共有几行几列,有多少个不同的值2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模图例:应用实例:代码实现:package com.sanjin.study;/** * @author sanjin * @create 2021-12-18 11:32 */public class SparseArray { ...
2021-12-18 13:18:44
336
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人