编程的网站,电子商务网站建设考试重点,成品片a免费入口,苏州规划建设局网站给定一个未排序的整数数组 nums #xff0c;找出数字连续的最长序列#xff08;不要求序列元素在原数组中连续#xff09;的长度。#xff08;来源力扣#xff09;
示例 1#xff1a;
输入#xff1a;nums [100,4,200,1,3,2]
输出#xff1a;4
解释#xff1a;最长…给定一个未排序的整数数组 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 1while num 1 in nums:num 1tmp 1res max(res, tmp)return res 贪心算法
事例一找零钱问题
假设你开了间小店不能电子支付钱柜里的货币只有 25 分、10 分、5 分和 1 分四种硬币如果你是售货员且要找给客户 41 分钱的硬币如何安排才能找给客人的钱既正确且硬币的个数又最少
只追求局部最优
1.找给顾客sum_money41分钱可选择的是25 分、10 分、5 分和 1 分四种硬币。能找25分的不找10分的原则初次先找给顾客25分 2.还差顾客sum_money41-2516。然后从25 分、10 分、5 分和 1 分四种硬币选取局部最优的给顾客也就是选10分的此时sum_money16-106。重复迭代过程还需要sum_money6-51,sum_money1-10。至此顾客收到零钱交易结束 3.此时41分分成了1个251个101个51个1共四枚硬币。
#includeiostream
using namespace std;#define ONEFEN 1
#define FIVEFEN 5
#define TENFEN 10
#define TWENTYFINEFEN 25int main()
{int sum_money41;int num_250,num_100,num_50,num_10;//不断尝试每一种硬币while(moneyTWENTYFINEFEN) { num_25; sum_money -TWENTYFINEFEN; }while(moneyTENFEN) { num_10; sum_money -TENFEN; }while(moneyFIVEFEN) { num_5; sum_money -FIVEFEN; }while(moneyONEFEN) { num_1; sum_money -ONEFEN; }//输出结果cout 25分硬币数num_25endl;cout 10分硬币数num_10endl;cout 5分硬币数num_5endl;cout 1分硬币数num_1endl;return 0;
}