给定一个未排序的整数数组 nums
,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。(来源力扣)
示例 1:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
- class Solution:
- def longestConsecutive(self, nums: List[int]) -> int:
- nums = set(nums)
- res = 0#记录每一次遍历的连续值,用于比较最大
- for num in nums:
- # 判断是否是第一个数字,如果不是则不执行,减少复杂度
- if num - 1 not in nums:
- tmp = 1
- while num + 1 in nums:
- num += 1
- tmp += 1
- res = max(res, tmp)
- 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,共四枚硬币。
- #include
- using namespace std;
-
- #define ONEFEN 1
- #define FIVEFEN 5
- #define TENFEN 10
- #define TWENTYFINEFEN 25
-
- int main()
- {
- int sum_money=41;
- int num_25=0,num_10=0,num_5=0,num_1=0;
-
- //不断尝试每一种硬币
- while(money>=TWENTYFINEFEN) { num_25++; sum_money -=TWENTYFINEFEN; }
- while(money>=TENFEN) { num_10++; sum_money -=TENFEN; }
- while(money>=FIVEFEN) { num_5++; sum_money -=FIVEFEN; }
- while(money>=ONEFEN) { num_1++; sum_money -=ONEFEN; }
-
- //输出结果
- cout<< "25分硬币数:"<
- cout<< "10分硬币数:"<
- cout<< "5分硬币数:"<
- cout<< "1分硬币数:"<
-
- return 0;
- }
-
相关阅读:
链路聚合实验(华为)
【阅读笔记】《深度学习》第二章:线性代数
VoLTE基础自学系列 | 企业语音网简述
C++ const关键字
自助空间系统共享棋牌室办公室小程序开发
VUE指令语法解析标签属性
象棋中的马跳步问题
音视频开发是不是C++开发中最难的细分方向?
CCF ChinaSoft 2023 论坛巡礼 | 智能化软件开发和维护论坛
【附源码】Python计算机毕业设计民宿客房管理系统
-
原文地址:https://blog.csdn.net/xty123abc/article/details/133621372