剑指offer笔记(六) 第40题至第46题


前言

这次主要记录剑指offer的7道题,主要使用的语言是python,下面将对这7道题的一些感悟和知识点进行汇总!


提示:以下是本篇文章正文内容,下面案例可供参考 截图来源于LeetCode

一、JZ40 最小的k个数

在这里插入图片描述
  常规方法很好用,也容易编写,但耗时较大。由于存在排序操作,一半时间复杂度在O(n)下搞不定,那么使用最小堆是个不错的方法。要注意啊,这里的最小堆很容易搞乱,由于需要返回k个数字,那么就用数列的前k个数字来创建动态数组,因为获取的是最小的k个数字,所以需要将最小堆转化为最大堆,很简单了,加个负号!之后就是不停地从最小堆里面“吐”数字,如果比数组下标k之后的数字大,则弹出去,将新的数字“压”进来。

以下为程序源码:
在这里插入图片描述

二、JZ41 数据流中的中位数

在这里插入图片描述

  这道题挺费劲的,需要一个最小堆和一个最大堆来获得中位数,这里倾向于将奇数个数的数组的中位数存放在最小堆中。

以下为程序源码
在这里插入图片描述

三、JZ42 连续子数组的最大和

在这里插入图片描述

  没什么好说的一直加 一直比较,需要注意正数的话,越加越大,负数则是越加越小,所以对待正数加操作是必须的,而负数的话仅比较便可。

以下为程序源码:
在这里插入图片描述

四、JZ43 1~n整数中1出现的次数

在这里插入图片描述
  代码不多,但需要穷举法找规律,可以看蛋包饭的视频讲解,很详细。

以下为程序源码:
在这里插入图片描述

五、JZ44 数字序列中某一位的数字

在这里插入图片描述

  看代码,很棒的方法,不过比较非内存,单很容易理解!传统方法需要对位数进行一个规律统计,使用start和digit两个变量进行数序的模拟,具体看代码,在此不多赘述。
在这里插入图片描述
以下为程序源码:
在这里插入图片描述

六、JZ45 把数组排成最小的数

在这里插入图片描述
  这道题涉及一个证明问题,挺费劲的,简而言之,就是拼接的数组,左面的部分需要大于右面的部分,超级抽象,背会算了!

以下为程序源码:
在这里插入图片描述

七、JZ46 把数字翻译成字符串

在这里插入图片描述

  动态规划,看代码注释理解,主要是搞懂传递公式,后面就容易理解了。

以下为程序源码:
在这里插入图片描述

八、总结

  巨难,重新复习也发现,好难!只要涉及到找规律或者动态规划找公式就很费脑筋,直接记忆是最好的办法,别想那么多。昨天背了一句非常不错,巨美的诗:
   I like for you to be still
   It is as though you are absent
   And you hear me from far away
   And my voice does not touch you

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值