| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 别再羊了个羊了,大家都在玩刷了个题——LeetCode刷题第3周小结 -> 正文阅读 |
|
[数据结构与算法]别再羊了个羊了,大家都在玩刷了个题——LeetCode刷题第3周小结 |
?前言??????? 最近羊了个羊火爆全网,我也不知道这游戏为啥这么火啊,感觉就是低化版的消消乐,第一关幼儿园,第二关直接清华北大,游戏道具图案随机出现,能通关几乎只能靠运气加成,和数学逻辑没有太大关系,消耗的是巨大的时间。背后的底层套路是设置噱头吸引巨大流量,接入广告,所以这款微信小游戏背后的运营者简直赢麻了! ????????扯远了,扯远了,羊了个羊也就估计火个两三周,但刷了个题还是得坚持玩啊,每日一题就像每日一关,力扣几千关等待各位扣友一起去AC!这是坚持刷题的第三周,期初是和朋友一起互相监督刷题、选题,如今已经成为每日的一种习惯,带着配备无限键盘的平板,再下载力扣APP,上无聊的杂课时能随时随地拿出来AC一道easy题,虽然现在自己的算法水平还是蛮菜的,但“骐骥一跃,不能十步;驽马十驾,功在不舍!”? 坚持总归有所收获的!! 文章目录 关键字二维数组一维化、行列号的映射关系、枚举法、滑动窗口、模拟竖式计算、字符串变量StringBuffer、双指针、动态规划初步、滚动数组 ?1.重塑矩阵难度:★ ? 链接:力扣 解题思路: ????????本题思路很简单,即将二维数组进行顺序行遍历,将数依次填入r行c列的数组中。若二者个数不相等则肯定无法重塑,直接返回原来数组;否则,进行二维数组的顺序行遍历,此时即将一个二维数组转化成了一个一维数组,下面一步最重要的就是如何确定具体的行列号坐标,通过观察我们发现:一个m行n列的二维数组中的一个数a[ i ][ j ] ,其行号i是由列号j除列数n得到的商所确定的,而列号j是由列号j对列数n取余所得到的, 即:? i=j/n?? j=j%n ? 这个重要的映射关系对本题的填充数字很重要! 解题代码:
? ? 2.最长和谐子序列难度:★? 链接:力扣 ? 解题思路: 枚举法,可以枚举数组中的每一个元素,对于当前元素x,它可以和x+1组成一个和谐子序列。所以问题可以转化为:我们在数组中寻找x和x+1的个数,就可以找到以x为最小值的和谐子序列的长度。这一思路是利用枚举法解题的关键所在。同时注意以下几点:
? 解题代码:
? ? 3.验证回文串难度:★ 链接:力扣 ? 解题思路: 方法一:筛选+判断,即:先将字符串中的字母与数字字符取出存入字符串变量StringBuffer中,最后将其进行翻转与原来进行字符串比较,相同则是回文串返回true ,否则不是回文串,返回false 解题代码:
? 方法二:双指针法,设置两个指针left与right分别从已经取出字母数字字符的字符串的首尾同时向中间移动,步长相同,每移动一次判断各自对应的字符是否相等,不相等直接返回false ,否则继续移动,如果该字符串是回文串,则左右指针left与right终会相遇,返回true 解题代码:
? 4.第三大的数难度:★? 链接:力扣 ? 解题思路: 先将数组降序排列,然后从中找出第三个不重复的元素返回即可,我们用变量count来记录元素的种类,当达到3时返回此时的元素即为数组中第三大的元素 ;如果遍历结束仍未返回,则说明数组中元素不存在第三大的数字,返回最大的数nums[0](已经降序排列) 解题代码:
? ? 5.加一难度:★? 链接:力扣 ? ? 解题思路: 一个数字加一,只需考虑末尾是否为9,即是否需要进位的情况;如果末尾为9则进一后原位置数值为0.如果末尾不是9则直接普通加一返回数组即可。注意这里所说的“末尾”是动态变化的,简单来说就是从后往前遍历数组,判断该位置的数字是否为9 ,最后别忽略了全部进位的情况,则要额外开辟一个空间给最高位即进位的1来使用。 解题代码:
? 6.汇总区间难度:★? 链接:力扣 ? 解题思路: ?蛮力法,依次遍历找出连续区间,然后将此区间的左右端点加入字符串变量,然后将其加入动态数组中。注意点就是要判断该区间内连续元素的个数,如果只有一个,则不用输出区间直接输出单个值即可,否则要按照题目要求的格式 a->b的格式将其加入动态数组。 解题代码:
? 7.爬楼梯难度:★? 链接:力扣 ? 解题思路: ?动态规划法:我们用f(x)代表爬到第x级台阶的方案数,因为一次只能爬1级或者2级,所以最后一步可能是爬1级到达x级,或者爬2级到达x级,所以爬到x级的方案数是爬到x-1级台阶和爬到x-2级台阶的方案数之和,所以我们可以列出如下的式子:f(x) = f(x-1) + f(x-2) 。这就是动态规划的状态转移方程,即f(x)只能是由f(x-1)和f(x-2)转移过来 。 解题代码:
注意到这里的时间复杂度与空间复杂度都为O(n),但是这里我们可以发现f(x)之和f(x-1)和f(x-2)有关,所以我们可以利用“滚动数组的思想”,把其空间复杂度优化为O(1),代码如下:
滚动数组的思想是个基本思想,可以结合下面动图来理解 另外贴一位扣友的总结,非常到位的总结 ? ? 8.二进制求和难度:★?? 链接:力扣 ? 解题思路: 本题类似于十进制加法,模拟其竖式计算,只不过进制不同,这是二进制加法,需要逢二进一,注意进位的值最后为1的情况 解题代码:
? ? 本专栏目前适合算法初学者学习,刷题范围主要是力扣的简单题偶尔夹杂中等题,语言主要使用Java,如果是水平很高的大佬可以略读本文,如果是还处在算法刷题初级阶段的朋友,可以点赞关注一下,我会一直更新下去的。 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:44:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |