LeetCode的悲惨刷题之旅—724.寻找数组的中心索引

724.寻找数组的中心索引

        之前一直在研究项目,毕竟是这个假期才开始起步,对于项目制作(就是些小玩意)投入的精力过大,不过好歹学完了ssm框架,以后会给大家多分享一些,我做项目的一些小总结和一些错误的小经验(我的学习视频是黑马的)。最近才开始尝试着对数据结构和算法进行学习,所以说,我现在就是一个初学者,我可以用初学者的思想,给大家分享一些内容。

        话不多说,我们直接进入正题,让我们先来读一下题:
在这里插入图片描述
英文版(可以复习下英语,嘻嘻)
在这里插入图片描述
来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/find-pivot-index (题的链接)

        先不看输入输出,我们可以看的出来,这是一道关于数组的简单题(对,没听错,简单题),刚开始入门的时候不要太急于求成,直接写难的那些题,很容易让你失去学习乐趣,要循序渐进,有的大哥会问我,为什么不写关注度极高的第一道题(两数求和)?你相信我,这个绝对简单。

        因为看到题的第一眼,我们就知道,这道题就是考索引,不用往别的地方想,就是索引,就完了。那我们针对索引用什么呢,当然对于数组来说,求索引肯定是先遍历,那怎么去操作实际的值呢?我们可以直接使用暴力解法,定义两个变量的值,然后去存左右的值的和,如下:

在这里插入图片描述

        然后再去单独遍历左边和右边来求和,然后注意每次遍历完之后,都要让两边的变量回到初始值:

在这里插入图片描述
        我们再从头捋一下思路,我们需要找到那个中心索引,所以首先遍历数组,然后我们需要找到左边和右边的值,所以需要两个空变量去存两边的和,最后比较进行返回,如果不符合,则返回-1。

当然了,在提交之后,你就会看到这张图:
在这里插入图片描述

        没错,你成功了,但是仔细看,这时间和内存用的有点多啊,这要是面试的话,面试官一定不会要暴力解法的人。我们可以简单看一下时间的复杂度(直接忽略常数,并以最坏情况粗略计算)n(n/2)+n(n/2),可以看出时间复杂度大约为O(n^2)(粗略的算了一下,时间复杂度掌握的不熟练,希望错的地方可以指出来,谢谢),实际上,你看到437ms,就会知道是自己的程序还可以优化。

接下来让我们另一种解法的时间:
在这里插入图片描述

        可以知道这个解法,应该是极其优秀的了,面试官要的是哪种解法,不言而喻,让我们看一下这种解法:
在这里插入图片描述
        有了刚才暴力解法的基础,我们可以很容易看出这道题的思路,先是算出总和,再去减左边的值和中心索引算出中心索引,我们可以看到时间复杂度就是O(n),很容易理解。

        这道题是不是很简单,而且解法不唯一,可以充分的发挥你的想象,也许还有别的解法。但是有一点要注意每个刚入门的人,在拿到题的时候,无论是否困难,都要尽量自己去做一下,找一下思路,不管是不是最优解法,但它最起码是你的思路,你要有思路再思考最优解,之后你才能写出更快更好的算法。

        以后我会频繁的更新算法这方面的内容,如果有喜欢的朋友,可以关注一下小新,谢谢大家支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值