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


    给定一个未排序的整数数组 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. }

  • 相关阅读:
    英语学习笔记14——What color‘s your ... ?
    6.javase_方法
    spring:实现初始化动态bean|获取对象型数组配置文件
    安装ZooKeeper集群
    华为云云耀云服务器L实例评测|使用宝塔10分钟部署一个围猫猫小游戏
    VoLTE基础自学系列 | VoLTE呼叫流程之VoLTE打VoLTE,主被叫接入域为LTE
    Spring Boot传参注解详解
    大数据Flink(九十七):EXPLAIN、USE和SHOW 子句
    美术作品的著作权
    RL强化学习总结(四)——DQN算法
  • 原文地址:https://blog.csdn.net/xty123abc/article/details/133621372