• 保研机试算法训练个人记录笔记(二)


    给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。(来源力扣)

    示例 1:

    输入:nums = [100,4,200,1,3,2]
    输出:4
    解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4
    1. class Solution:
    2. def longestConsecutive(self, nums: List[int]) -> int:
    3. nums = set(nums)
    4. res = 0#记录每一次遍历的连续值,用于比较最大
    5. for num in nums:
    6. # 判断是否是第一个数字,如果不是则不执行,减少复杂度
    7. if num - 1 not in nums:
    8. tmp = 1
    9. while num + 1 in nums:
    10. num += 1
    11. tmp += 1
    12. res = max(res, tmp)
    13. return res

     贪心算法

    事例一:找零钱问题

    假设你开了间小店,不能电子支付,钱柜里的货币只有 25 分、10 分、5 分和 1 分四种硬币,如果你是售货员且要找给客户 41 分钱的硬币,如何安排才能找给客人的钱既正确且硬币的个数又最少

    只追求局部最优

    1.找给顾客sum_money=41分钱,可选择的是25 分、10 分、5 分和 1 分四种硬币。能找25分的,不找10分的原则,初次先找给顾客25分;
    2.还差顾客sum_money=41-25=16。然后从25 分、10 分、5 分和 1 分四种硬币选取局部最优的给顾客,也就是选10分的,此时sum_money=16-10=6。重复迭代过程,还需要sum_money=6-5=1,sum_money=1-1=0。至此,顾客收到零钱,交易结束;
    3.此时41分,分成了1个25,1个10,1个5,1个1,共四枚硬币。

    1. #include
    2. using namespace std;
    3. #define ONEFEN 1
    4. #define FIVEFEN 5
    5. #define TENFEN 10
    6. #define TWENTYFINEFEN 25
    7. int main()
    8. {
    9. int sum_money=41;
    10. int num_25=0,num_10=0,num_5=0,num_1=0;
    11. //不断尝试每一种硬币
    12. while(money>=TWENTYFINEFEN) { num_25++; sum_money -=TWENTYFINEFEN; }
    13. while(money>=TENFEN) { num_10++; sum_money -=TENFEN; }
    14. while(money>=FIVEFEN) { num_5++; sum_money -=FIVEFEN; }
    15. while(money>=ONEFEN) { num_1++; sum_money -=ONEFEN; }
    16. //输出结果
    17. cout<< "25分硬币数:"<
    18. cout<< "10分硬币数:"<
    19. cout<< "5分硬币数:"<
    20. cout<< "1分硬币数:"<
    21. return 0;
    22. }

  • 相关阅读:
    链路聚合实验(华为)
    【阅读笔记】《深度学习》第二章:线性代数
    VoLTE基础自学系列 | 企业语音网简述
    C++ const关键字
    自助空间系统共享棋牌室办公室小程序开发
    VUE指令语法解析标签属性
    象棋中的马跳步问题
    音视频开发是不是C++开发中最难的细分方向?
    CCF ChinaSoft 2023 论坛巡礼 | 智能化软件开发和维护论坛
    【附源码】Python计算机毕业设计民宿客房管理系统
  • 原文地址:https://blog.csdn.net/xty123abc/article/details/133621372