![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 60
刺杀曲奇兔
这个作者很懒,什么都没留下…
展开
-
无法吃午餐的学生数量 | leetcode算法学习
不使用队列。创建布尔数组以记录拿走午餐的人,定义两变量作为学生与三明治组的下标,如果有学生拿走三明治则三明治下标+1,但每次循环学生下标都要+1,因为如果拿走则轮到下一个学生,没有拿走则返回队尾重新开始排队学生也+1,注意循环到末尾时重新赋值为0以达到队列的效果,再定义一个变量为0,每次经过一个学生+1,每次有新的学生拿走三明治时赋值为0重新开始记录,如果完整循环一次却没有学生拿走三明治以中断记录说明当前的三明治是所有剩余学生都不需要的,找出此时布尔数组中false的个数即为剩余排队人数。原创 2022-10-19 22:58:30 · 284 阅读 · 1 评论 -
水果成篮 | leetcode算法学习
这道题其实不难理解,寻找最长的只含两个元素的连续子序列,我第一反应应该用一个数组记录长度,首先在遍历所给数组时找到第一个与上一个元素不同的元素,并将这两个元素存储起来再继续向后遍历时进行比较,如果有不同的说明已经到这两个元素组成连续子序列的最大长度,将长度存储,然后丢掉第一个元素继续向后遍历,直到结束,需要处理的地方在于边界处.提交成功之后查看题解,使用HashMap的滑动窗口,也不是很难理解,看过之后发现我的代码其实也是滑动窗口的一种形式,茅塞顿开.原创 2022-10-17 21:41:49 · 328 阅读 · 0 评论 -
用栈操作构建数组 | leetcode算法学习
这题medium,读懂题就很简单,从1到n依次读入只留下target中需要的数,秒了。原创 2022-10-15 14:24:09 · 218 阅读 · 0 评论 -
链表组件 | leetcode算法学习
题意很简单,找出head中拥有nums的最长子链表的组数,思路也很清晰,找出最长连续的值,如果有中断就代表下一个子链表的开始,不过每次都遍历数组是有点麻烦的,好在set中有`contains`方法,可以直接查找集合中是否存在某元素并返回布尔值,所以我们先把nums中的元素放进创建好的set中再进行操作就可以。原创 2022-10-12 13:38:34 · 263 阅读 · 0 评论 -
括号的分数 | leetcode算法学习
深度优先搜索,将字符串当作树状结构。原创 2022-10-11 16:13:55 · 105 阅读 · 0 评论 -
优势洗牌 | leetcode算法学习
非常典型的贪心,每次在A中寻找大于B[i]的最小值,若没有,则返回A中的最小值。如果A组最差的比不过A组最差的,就去消耗A组最强的来扩大优势。关键在于,如何快速在nums1中找到大于nums2[i]的最小值,可以使用二分法来查找。 所以在查找之前,要将nums1先从小到大排序。 还要注意的一点是每次找到了nums1中大于nums2[i]的最小值,都要在nums1中删除这个值,避免重复使用。这里使用了布尔数组来达到删除效果。步骤:- 将num1排序,- 从num2最大值开始比较,在nums1中二分查原创 2022-10-11 15:55:41 · 208 阅读 · 0 评论 -
盛最多水的容器 | leetcode算法学习
暴力解会超时,所以我们在遍历上想办法跳过无用的循环,如果直接能判断出当前数据一定比已经记录的最大值小就可以跳过这组数据。从两端开始向内推进,短板原理盛水最大量取决于最短的木板,所以我们算出当前水量后循环找出更长的“木板”即可,短一些的由于宽高都在减小盛水量必然是比不过之前的。这样的循环可以节约大量时间。原创 2022-10-07 16:52:23 · 84 阅读 · 0 评论 -
回文数 | leetcode算法学习
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。方法1:将数字转为字符串数组逐位比较方法2:数字翻转比较原创 2022-10-07 15:53:58 · 95 阅读 · 0 评论 -
最大升序子数组 | leetcode算法学习
给你一个正整数组成的数组 nums ,返回 nums 中一个 升序 子数组的最大可能元素和。子数组是数组中的一个连续数字序列。已知子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,若对所有 i(l原创 2022-10-07 15:04:13 · 105 阅读 · 0 评论 -
字符串转换整数 | leetcode算法学习
1.除去前导02.判断正负3.在遇到非数字字符时停止程序返回04.注意溢出5.返回整数原创 2022-10-06 17:35:42 · 152 阅读 · 0 评论 -
子域名访问计数 | leetcode算法学习
这道题用HashMap思路很简单,将数组里的各级域名都拆出来然后放在一个新表中,由于放在HashMap中既可以满足域名唯一性以及便捷提取数据的特点显然要比放在数组里合适,在数组中添加新的数据时要先遍历一次是否存在该内容,并且计数也不是很方便,HashMap的key,value特性还有put,get方法直接就解决了这个问题,但是由于put方法会覆盖之前的值,所以我们使用 **getOrDefault(Object key, V defaultValue)** 方法,意思就是当Map集合中有这个key时,就使用原创 2022-10-06 15:50:55 · 107 阅读 · 0 评论 -
Z字形变换 | leetcode算法学习
理解题意后可知Z是竖着的,可能N更合适一点,从上到下从左到右把字符串按要求排列,第一下想到的是数组,观察后可发现可以把它分为一竖一斜线的重复执行,且每条竖线开始的下标有迹可循,每次开头所要遍历的字符个数也是相同的(除了最后一次可能不完整)。每一个圈为一次循环,上面是原数组遍历个数,下面是新数组每次循环下标增加的值,还有定义二维数组时列数为`字符串长度一半+numRows-1` ,为了保证每个元素都能被遍历到,for循环在字符串长度的基础上加了一个循环的长度,但这样会导致字符串被遍历完时for循环还没完成的情原创 2022-10-04 16:57:17 · 112 阅读 · 0 评论 -
使括号有效的最少添加 | leetcode算法学习
只有满足下面几点之一,括号字符串才是有效的: - 它是一个空字符串,或者 - 它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者 - 它可以被写作 (A),其中 A 是有效字符串。 给定一个括号字符串 s ,移动N次,你就可以在字符串的任何位置插入一个括号。 例如,如果 s = “()))” ,你可以插入一个开始括号为 “(()))” 或结束括号为 “())))” 。 返回 为使结果字符串 s 有效而必须添加的最少原创 2022-10-04 14:22:50 · 137 阅读 · 0 评论 -
最长回文子串 | leetcode算法学习
保存起始位置把回文看成中间的部分全是同一字符,左右部分相对称找到下一个与当前字符不同的字符查找中间部分定位中间部分的最后一个字符从中间向左右扩散记录最大长度原创 2022-10-03 16:38:36 · 78 阅读 · 0 评论 -
检查二进制字符串字段 | leetcode算法学习
思路:先把1第一次出现的位置用函数indexof找出,然后从此向后遍历,由于字符串没有下标,所以我们在indexof返回的位置基础上单独设置一个变量作为位置然后使用charAt返回ASCII码值与0和1进行比较,遇到0的时候说明这段连续1的子串已经被找出,子串数+1,然后略过连续0的部分寻找可能存在的下一个1,找到之后依旧是在碰到0时表明第二个子串已被找出,子串数+1·······原创 2022-10-03 15:39:34 · 142 阅读 · 0 评论 -
重新格式化电话号码 | leetcode算法学习
简单题,思路也简单,只需要处理初始字符串和在规定位置添加`-`就可。由于replace函数不能修改原字符串,所以要重新赋值,根据条件在剩余字符数大于4的情况下末四位要根据情况来定,所以将2、3、4及4以上位数分开讨论,前三部较简单第4步设置for循环依次递增在遇到3的整数倍时添加`-`,同样在剩余4位时进行不同处理,这里注意一定要在添加完`-`后判断,否则可能会出现末4位中前三位后加破折号只留最后一位的情况,不符合题意。原创 2022-10-01 10:14:06 · 100 阅读 · 0 评论 -
无重复字符的最长字符串 | leetcode算法学习
又是一道中等难度的题,解法也十分巧妙,首先将字符串的存储转为ASCII码的存储,这样做的意义就在于能够将循环查找改为索引查找,在判断该字符是否为首次出现有很大帮助。其次这样可以只使用一次循环,在遇到相同字符时从前一字符的下一位开始继续寻找更长的子串,方便快捷。此外,此解与官方解有区别的地方就在于这里在遇到重复字符时采取的方式为将新**的子串起始位置变为第一次重复的字符右一位**,而不是按顺序每次都向右移一位,这样做的好处为**减少循环次数**,但缺点为**增加了空间去记录每个字符的位置**,属于以空间换时间原创 2022-09-30 18:13:32 · 300 阅读 · 0 评论 -
零矩阵 | leetcode算法学习
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。这道题的思路很简单,就是找出0所在行列的下标然后输出的时候进行判断,由于直接进行清除会导致同行列的0对应行列不能被清除,所以要先找到所有的0。个人认为妙点在 **row[i] = true,col[j] = true**这两行,这样不用每次都计算当前数是不是在已记录的下标当中。原创 2022-09-30 16:31:12 · 167 阅读 · 0 评论 -
字符串轮转 | leetcode算法学习
字符串轮转两种解法原创 2022-09-29 20:46:48 · 77 阅读 · 0 评论 -
两数相加 | leetcode算法学习
单链表的创建、简单功能、两数相加思路原创 2022-09-29 20:12:52 · 77 阅读 · 0 评论 -
两数之和 leetcode算法学习
查找表法原创 2022-09-28 10:43:35 · 60 阅读 · 0 评论 -
蓝桥杯2018年省赛真题--全球变暖
题目描述你有一张某海域 NxNNxNNxN 像素的照片,".“表示海洋、”#"表示陆地,如下所示:. . . . . . .. # # . . . .. # # . . . .. . . . # # .. . # # # # .. . . # # # .. . . . . . .其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有 2 座岛屿。由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(.原创 2022-01-26 19:46:26 · 1442 阅读 · 0 评论 -
c语言求解常用算法
快捷且常用的算法可以在做题时起到事半功倍的效果,建议记忆后使用。不定时更新~1.快速幂运算2.最大公约数3.最小公倍数4.求一个数的所有因子原创 2022-01-24 10:57:44 · 361 阅读 · 0 评论 -
数据结构学习笔记-查找
声明:本博客仅为本人学习途中做的笔记 采自青岛大学王卓老师的视频教学 主要内容为算法思路,具体代码实现还需修改后才能运行,望各位看官多多包涵,您的点赞与评论是对我最大的肯定!1.查找的基本概念在哪里找?\qquad\qquad\qquad——查找表查找表是由同一类型的数据元素(或记录)构成的集合。由于“集合”中的数据元素之间存在着松散的关系,因此查找表是一种应用灵便的结构。什么是查找?\qquad\qquad\qquad——根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或(.原创 2021-12-30 16:30:17 · 410 阅读 · 0 评论 -
数据结构与算法学习笔记-线性表
声明:本博客仅为本人学习途中做的笔记 采自青岛大学王卓老师的视频教学 主要内容为算法思路,具体代码实现还需修改后才能运行,望各位看官多多包涵,您的点赞与评论是对我最大的肯定!# 1.线性表的定义和特点线性表是具有相凤特性的数据元素的一个有限序列(a1,a2,...ai−1,ai,ai+1,...,an)(a_1, a_2, ... a_i-_1, a_i,a_i+_1, ..., a_n)(a1,a2,...ai−1,ai,ai+1,...,an)\qquad\qquad\q.原创 2021-12-10 19:30:10 · 590 阅读 · 0 评论 -
数据结构与算法学习笔记-栈和队列
声明:本博客仅为本人学习途中做的笔记 采自青岛大学王卓老师的视频教学 主要内容为算法思路,具体代码实现还需修改后才能运行,望各位看官多多包涵,您的点赞与评论是对我最大的肯定!1.栈和队列的定义和特点栈和队列是两种常用的、重要的数据结构栈和队列是限定插入和删除只能在表的"端点"进行的线性表栈和队列是线性表的子集(是插入和删除位置受限的线性表)由于栈的操作具有后进先出的固有特性,使得栈成为程序设计中的有用工具。另外,如果问题求解的过程具有"后进先出"的天然特性的话,则求解的算法中也必然需要利用.原创 2021-12-10 21:00:29 · 1093 阅读 · 0 评论 -
数据结构与算法学习笔记-树和二叉树
声明:本博客仅为本人学习途中做的笔记 采自青岛大学王卓老师的视频教学 主要内容为算法思路,具体代码实现还需修改后才能运行,望各位看官多多包涵,您的点赞与评论是对我最大的肯定!1.树和二叉树的定义数据的逻辑结构{线性结构{线性表栈(特殊线性表)队列(特殊线性表)字符串、数组、广义表非线性结构{树形结构图形结构数据的逻辑结构\begin{cases} 线性结构\begin{cases} 线性表 \\ 栈(特殊线性表) \\ .原创 2021-12-10 22:12:06 · 671 阅读 · 0 评论 -
数据结构与算法学习笔记-图
声明:本博客仅为本人学习途中做的笔记 采自青岛大学王卓老师的视频教学 主要内容为算法思路,具体代码实现还需修改后才能运行,望各位看官多多包涵,您的点赞与评论是对我最大的肯定!1.图的定义和基本术语图:G=(V,E)V:顶点(数据元素)的有穷非空集合G:边的有穷集合无向图:每条边都是无方向的有向图:每条边都是有方向的完全图:任意两个点都有一条边相连稀疏图:有很少边或弧的图(e<nlogn)稠密图:有较多边或弧的图网:边/弧带权的图邻接:有边/弧相连的两个顶点之间的联系存在(.原创 2021-12-10 22:43:48 · 785 阅读 · 0 评论 -
数据结构与算法学习笔记-排序
声明:本博客仅为本人学习途中做的笔记 采自青岛大学王卓老师的视频教学 主要内容为算法思路,具体代码实现还需修改后才能运行,望各位看官多多包涵,您的点赞与评论是对我最大的肯定!数据结构{数据的逻辑结构{线性结构{线性表栈(特殊线性表)队列(特殊线性表)字符串、数组、广义表非线性结构{树形结构图形结构数据的存储结构{顺序存储链式结构数据的运算:插入、删除、修改、查找、排序等数据结构 \begin{cases}数据的逻辑结构\begin{cases} 线性结构\begin{cases}线性表\.原创 2021-12-15 22:49:04 · 1263 阅读 · 0 评论 -
函数传参的三种方式(详细)
最近又碰到了函数传参的问题,每次碰到都会让作者疑惑一段时间,这次干脆总结整理一下,顺便让自己更加透彻的了解传参的问题。咱们开始吧。c语言中,函数调用时传送给形参表的实参必须与形参有三个一致:类型、个数、顺序,函数传参有三种方式:值传递,地址传递,引用传递下面我们首先来介绍值传递:值传递为最简单的一种,因为它是把实参的值传送给函数局部工作区相应的副本中,函数使用这个副本执行必要的功能。函数修改的是副本的值,实参的值不变。我们来看代码:#include<stdio.h>void.原创 2021-12-26 09:33:59 · 19503 阅读 · 4 评论