首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

剑指 offer——面试题8求旋转数组的最小值

题目:将一个非递减序列的某一处切一刀,再把前半段序列放到后半段序列的后面,这样组成的新序列叫做“旋转数组”。要求获取一个旋转数组的最小值。 这本质上是一个求最值的问题,最简单的方法就是顺序遍历数组,从中找出最小值,该方法的时间复杂度为O(n)。但这种方法会被面试官鄙视的,所以我们寻找更为高效的办法。 这道题给的数组是一个“旋转数组”,旋转数组是将一个非递减数组切成两个数组后重新组装而成的,旋转数组的前半段所有元素值均大于等于后半段元素的值,两段的分界点就是最小值。 要寻找分界点,可以采用对半搜索,若第一个元

06

两个数组的交集II

本题使用哈希表的方式来解答,而Js中对象也是以HashTable进行存储的,便可以直接利用Js对象来实现哈希表,请注意题目要求结果中每个元素出现的次数应与元素在两个数组中出现次数的最小值一致,根据这个要求那么需要在哈希表中记录值出现的次数,首先定义一个HashTable用以记录值出现次数,然后定义目标数组,接着将第一个数组nums1进行遍历,在哈希表中如果没有定义这个key,那么就将这个key的值设置为1,如果已经定义了,那么就将其值自增,然后遍历第二个数组nums2,直接判断在哈希表中是否定义该key,如果定义且其计数值大于0,那么就将哈希表中该key的计数值自减,然后将该key推入数组,循环结束后返回目标数组即可。

01

数据结构002:买卖股票的最佳时机

结合题意,想获取高额回报,肯定是低买高卖,那我们首先想到的是找出数组中的最小值,当天买入,找出最大值,当天卖出,岂不美哉,但是两个字立马把我们拉回现实,如果数组的最大值在最小值前面呢,不就不符合实际情况了吗。那我们该怎么搞?突然想到这道题与我们之前的最大子数组和的内容有些类似,那解题思路是否类似呢?我们套用一下它的思路,找软柿子捏,先从短的数组开始分析(以{a, b, c, d, e}为例),既然要从短的数组分析,为了找出规律,我们将$f(i)$记为第$i$天卖出股票时的最大利润。那么,我们需要在0,i-1的范围内找到最小值minPrice_{[0,i)} ,则有f(i) = prices[i]-minPrice 。

02

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券