楼主: 美帝马甲
跳转到指定楼层
上一主题 下一主题
收起左侧

[数组] 返回第二大的元素index

 
🔗
perseids 2021-8-29 07:57:46 | 只看该作者
全局:
Shubin_ren 发表于 2021-8-28 16:31
简单数据结构的代价是效率和可读性,以及必要时候的followup

这题就是4个local vairable 代替一个Priority Queue, 牺牲了啥可读性? 效率肯定是提高不是牺牲。
回复

使用道具 举报

🔗
柯基101 2021-8-29 08:01:29 | 只看该作者
全局:
perseids 发表于 2021-8-28 16:57
这题就是4个local vairable 代替一个Priority Queue, 牺牲了啥可读性? 效率肯定是提高不是牺牲。

可读性不是local variable多少的问题
你的逻辑上相当于是一种穷举的做法,一个个去比较现在在variable里面的两个值,堆实际上是把这个过程分成两个独立的子过程,1 是判断,新element 和现有最小的 2是排序,在代码的角度这两个东西可以分别封装扩展
效率上,k 和 lgK,这就是你所谓的提升?
回复

使用道具 举报

🔗
perseids 2021-8-29 08:04:13 | 只看该作者
全局:
Shubin_ren 发表于 2021-8-28 17:01
可读性不是local variable多少的问题
你的逻辑上相当于是一种穷举的做法,一个个去比较现在在variable里 ...

建议你看一下Priority Queue的实现源码。
回复

使用道具 举报

🔗
柯基101 2021-8-29 08:25:54 | 只看该作者
全局:
perseids 发表于 2021-8-28 17:04
建议你看一下Priority Queue的实现源码。

你硬要这样和stl比,那可以自己实现一个简化版的heap
if(e > second) {
   swap(e, second);
   if(second > first) {
      swap(first, second);
    }
}

这段可以独立出来扩展到k,无非是自己决策如何实现这个“heap”,而不是变成穷举或者冒泡的思路
   
回复

使用道具 举报

🔗
一亩仨分 2021-8-29 11:25:36 | 只看该作者
全局:

捉大佬!
回复

使用道具 举报

🔗
莫涯泉水 2021-8-29 22:13:25 | 只看该作者
全局:

我另一个回复是one pass,应该行?
回复

使用道具 举报

全局:
Shubin_ren 发表于 2021-08-28 15:22:56
堆保证
1 堆里的两个元素是数组到目前为止的最大的两个,其中堆底是最大,堆顶是次大
2 每一次扫描到新的元素e,只有当e>top是,pop并且把e入堆,这样继续保证新的top次大,新底最大
1)  真的吗?  这是怎么实现的  (我真的不知道还有这个feature  能不能给个reference?
2)  那如果当前堆里面是 10,  5  现在来了一个8   这个8也没法pop顶上的  也不能把第二个pop  那怎么办?
回复

使用道具 举报

全局:
darinyu 发表于 2021-08-29 10:05:24
1)  真的吗?  这是怎么实现的  (我真的不知道还有这个feature  能不能给个reference?
2)  那如果当前堆里面是 10,  5  现在来了一个8   这个8也没法pop顶上的
哥们,我觉得你很有必要看一下堆的基础知识

https://zh.m.wikipedia.org/wiki/%E5%A0%86%E7%A9%8D
回复

使用道具 举报

全局:
Shubin_ren 发表于 2021-08-29 11:25:52
哥们,我觉得你很有必要看一下堆的基础知识

https://zh.m.wikipedia.org/wiki/%E5%A0%86%E7%A9%8D
这个ref里面 堆的两个性质

1.任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)。
2.堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。

哪个能保证次大的位置?

然后我那个例子你还怎么解决  我还是没懂
回复

使用道具 举报

全局:
darinyu 发表于 2021-08-29 11:34:23
这个ref里面 堆的两个性质

1.任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)。
你还是没看懂堆是干嘛的啊
你的例子
堆里面是10和5,其中10在底,5在顶
8>5,所以5出堆,8 push进去
然后就10在底8在顶,ref里面例程你看了吗??
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表