首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >菜鸟的每日力扣系列——用贪心简化“最长上升子序列”问题

菜鸟的每日力扣系列——用贪心简化“最长上升子序列”问题

作者头像
才浅Coding攻略
发布2022-12-12 17:37:48
发布2022-12-12 17:37:48
39900
代码可运行
举报
文章被收录于专栏:才浅coding攻略才浅coding攻略
运行总次数:0
代码可运行

力扣334. 递增的三元子序列

如何在只做一次遍历就得到结果呢?因为结果只有三个元素,而且是按列表下标序递增变大,那么我的思路是用一个变量去存一次遍历中列表的最小值,如果遇到比它小的就做替换;这次遍历中如果遇到比现有的最小值大的,就把它存成次小值;如果之后还有比次小值更大的,说明这个满足题意的三元组一定存在。上述过程也是唯一一种存在该三元组的情况,其他则都返回False。

代码语言:javascript
代码运行次数:0
运行
复制
from typing import List

def increasing_triplet(nums: List[int]):
    min_num, sec_num = float('inf'), float('inf')
    for i in nums:
        min_num = min(i, min_num)
        if i > min_num:
            sec_num = min(i, sec_num)
        if i > sec_num:
            return True
    return False

nums = [5, 4, 3, 2, 1]
print(increasing_triplet(nums))  
# False

力扣747. 至少是其他数字两倍的最大数

与上一题类似,结果是要大于元素其它至少2倍的元素,在一次遍历中找到最大值和次大值进行比较即可。由于要返回下标,使用enumerate()方法将下标和元素一起遍历。假设较大的元素是max_num,次大的元素是sec_num,一次遍历中,如果元素大于较大元素,那么把它和它的下标存下来;继续遍历如果大于次大元素,则对sec_num更新。如果最终得到的max_num >= 2 * sec_num,则返回较大值的下标,否则为-1。

代码语言:javascript
代码运行次数:0
运行
复制
from typing import List

def dominant_index(nums: List[int]):
    max_num = sec_num = index = -1
    for i, num in enumerate(nums):
        if num > max_num:
            sec_num, max_num, index = max_num, num, i
        elif num > sec_num:
            sec_num = num
        print("num_ele=", sec_num, "num_res=", max_num)
    return index if max_num >= 2 * sec_num else -1

nums = [3, 6, 1, 0]
print(dominant_index(nums))  # 1

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 才浅coding攻略 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档