最新要闻
- 女模砸评委后续:正面照曝光,疑全部模特均被潜规则,比赛很公平-全球快播报
- 至少涨价1500元该买还是买!iPhone 15备货量曝光:苹果出手近亿台-天天热推荐
- 【天天播资讯】19岁少年为救陌生姐姐放弃考试 网友点赞:换你会做吗?
- 【播资讯】特斯拉L3能力藏不住了!无需手扶方向盘:966公里0提醒接管
- 当前热议!今天周日调休上班!iPhone闹钟没响用户被坑:苹果本土化服务为啥不行?
- 广东高考今日放榜 26日17时前可提出复查分数申请_全球头条
- 焦点信息:联通2000M宽带有多快?中国联通小姐姐:下200分钟4K电影仅78秒
- 48GB内存笔记本正式上市 插满可扩至96GB
- 清华大学校长呼吁本科毕业生:不要过度关注个人利益 会烦恼焦虑 世界即时看
- 为什么119灭火不直接对准火源射水?消防员专业揭秘 全球关注
- 当前动态:《上古卷轴5:天际》4代湮灭Mod实机演示
- 10万元到1万元 激光电视降价为了什么
- 全球新消息丨ASML:芯片供应链脱钩自主生产不可能 美国日本也不例外
- 《消失的她》票房破5亿:打破44项影史纪录 端午档最强国产悬疑电影诞生 全球最新
- 五年来最火端午假期正式结束!这些城市最热门 你去了吗?
- 鸿海加快iPhone 15在印度量产:与中国大陆时间差将缩减至一个月-天天速递
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
【技术积累】算法中的贪心算法【三】_环球速读
贪心算法解决最短超级字符串问题
问题描述
(资料图片)
给定一个字符串数组,要求找出一个最短的超级字符串,即包含所有字符串的字符串,并且每个字符串仅出现一次。
输入:["abc", "bcd", "cde"]
输出:"abcde"
解题思路
1. 将给定的字符串数组按照长度从大到小排序,记为strings。2. 定义一个数组visited,用于记录每个字符串是否被访问过,初始值都为false。3. 定义一个变量result,用于记录最终的最短超级字符串,初始值为空字符串。4. 从第一个字符串开始遍历strings数组: a. 如果当前字符串已经被访问过,跳过该字符串。 b. 将当前字符串添加到result中,并将visited数组中对应位置设为true。 c. 从当前字符串的末尾开始,找到strings数组中还未访问过的字符串中最长的公共后缀,将其添加到result中,更新visited数组。5. 遍历完所有字符串后,result中存储的就是最短超级字符串。
伪代码
function findShortestSuperstring(strings): // 按照长度从大到小排序 sort(strings, descending order of length) // 记录每个字符串是否被访问 visited = new Array(strings.length, false) // 存储最短超级字符串 result = "" for i from 1 to strings.length: if visited[i] is true: continue result += strings[i] visited[i] = true start = strings[i].length while start > 0: maxLen = 0 maxIdx = -1 for j from 0 to strings.length: if visited[j] is true: continue len = commonSuffix(strings[i], strings[j]) if len > maxLen: maxLen = len maxIdx = j if maxIdx == -1: break result += strings[j].substring(maxLen) visited[maxIdx] = true start = strings[maxIdx].length return resultfunction commonSuffix(str1, str2): len1 = str1.length len2 = str2.length len = min(len1, len2) suffix = "" for i from 1 to len: if str1.substring(len1 - i) == str2.substring(0, i): suffix = str2.substring(0, i) return suffix
贪心算法解决最佳工作序列问题
问题描述
有n个待完成的工作,每个工作有一个开始时间和一个结束时间,要求找出一个最佳的工作序列,使得这些工作能够顺利完成,且尽可能多的工作能够被完成。
解题思路
1. 将给定的工作列表按照结束时间从小到大排序。2. 定义一个变量result,用于记录最终选择的最佳工作序列,初始为空序列。3. 选择第一个工作,将其加入result中。4. 从第二个工作开始遍历工作列表: a. 如果当前工作的开始时间在上一个工作的结束时间之后,说明可以选择该工作,将其加入result中。 b. 更新上一个工作为当前工作。5. 遍历完所有工作后,result中存储的就是最佳的工作序列。
伪代码
function findBestJobSequence(jobs): // 按照结束时间从小到大排序 sort(jobs, ascending order of end time) // 存储最佳工作序列 result = [] result.push(jobs[0]) prevJob = jobs[0] for i from 1 to jobs.length: currJob = jobs[i] if currJob.startTime >= prevJob.endTime: result.push(currJob) prevJob = currJob return result
注意:此处假设输入的工作列表是类似结构的数据,包含每个工作的开始时间和结束时间的信息,可以根据实际需求进行修改。
贪心算法解决最优加油问题
问题描述
在一条道路上有一辆汽车,道路的长度为L。汽车的油箱容量为C,初始时汽车油箱为空。汽车需要从起点到终点,期间会遇到N个加油站,每个加油站距离起点的距离为d,每个加油站可加油量为v。要求找到一个最优的加油方案,使得汽车能够顺利到达终点,且加油次数最少。
解题思路
1. 定义一个变量tank,用于存储汽车的当前油量,初始值为0。2. 定义一个变量count,用于存储加油次数,初始值为0。3. 定义一个变量currDistance,用于存储当前汽车到达的距离,初始值为0。4. 初始化一个最大堆maxHeap,用于存储可选的加油站,按照加油量v进行排序。5. 遍历加油站集合: a. 将当前加油站加入最大堆maxHeap。 b. 如果汽车的油量tank不足以到达当前加油站,且最大堆maxHeap不为空: - 从最大堆maxHeap中取出一个加油站,记为station。 - 计算需要从上一个加油站到达当前加油站所需的油量,记为requiredGas = station.distance - currDistance。 - 如果requiredGas大于汽车的油量tank,则无法到达当前加油站,返回-1。 - 将汽车的油量tank加上requiredGas,并将计数器count加1,表示加了一次油。 - 更新当前汽车到达的距离currDistance为当前加油站的距离。 c. 如果汽车的油量tank仍然不足以到达终点,则无法顺利到达终点,返回-1。6. 返回计数器count,表示最少的加油次数。
伪代码
function findOptimalRefueling(stations, L, C): tank = 0 count = 0 currDistance = 0 maxHeap = initializeMaxHeap() for each station in stations: addStationToMaxHeap(maxHeap, station) if tank < station.distance - currDistance and !isEmpty(maxHeap): while tank < station.distance - currDistance and !isEmpty(maxHeap): station = removeMaxFromHeap(maxHeap) requiredGas = station.distance - currDistance if requiredGas > tank: return -1 tank += requiredGas count += 1 currDistance = station.distance if tank < station.distance - currDistance: return -1 return count
注意:此处假设输入的加油站集合是一个类似结构的数据,包含每个加油站的距离和可加油量的信息,可以根据实际需求进行修改。
贪心算法解决硬币问题
算法问题描述:给定一个金额amount和一系列面额不同的硬币,要求用最少的硬币组合来凑成amount,并返回硬币的数量。假设有足够数量的每种硬币。
样例输入输出:输入:amount = 11, coins = [1, 2, 5]输出:3
解题思路:1. 初始化一个变量count,用于记录所需的硬币数量。2. 对面额数组coins进行降序排序,方便贪心选择。3. 遍历coins数组,记当前的硬币面额为coin。4. 若当前硬币面额coin小于等于amount,则将amount除以coin的商记为numCoins,表示可以使用numCoins个硬币coin来凑成amount。 - 将numCoins加到count中。 - 将amount更新为amount减去numCoins个硬币coin的面值。5. 返回count。
伪代码:
function coinChange(amount, coins) count = 0 sort coins in descending order for coin in coins if coin <= amount then numCoins = amount / coin count = count + numCoins amount = amount - (numCoins * coin) return count
说明:在此问题中,通过贪心选择每次选择最大面额的硬币,因为硬币的面额是固定的,所以这是一个可以使用贪心算法解决的合适情况。由于要求找出最少的硬币数量,因此我们先选择面额最大的硬币是最优的选择。然后逐步减少amount,直到amount变为0。注意,这里贪心选择可能不是全局最优解,但在这个问题中,贪心选择是可以得到最优解的。
贪心算法解决射击游戏问题
问题描述:
在一个射击游戏中,玩家需要射击一些不同颜色的气球。每个气球都有一个指定的得分值和一个爆炸半径。假设玩家的射击点是一个二维平面上的坐标(x, y),当玩家发射子弹到该点时,子弹会以该点为中心形成一个爆炸范围。任何与爆炸范围相交的气球都会被击中。玩家的得分等于所有被击中气球的得分值之和。现在,给定一些气球的坐标、得分值和爆炸半径,需要确定玩家应该选择哪个射击点来使得得分最大化。
样例输入输出:
输入:气球列表:[(1,2,3), (2,5,4), (3,1,2), (4,9,5)]描述:[气球的坐标(x, y),得分值,爆炸半径]
输出:最大得分值:14 (通过击中(1,2)和(2,5)这两个气球)
解题思路:
1. 创建一个空集合visited来保存已击中的气球。2. 遍历气球列表,每次选择得分值最高的气球,并将其加入visited集合。3. 定义一个函数is_overlap用来判断两个气球是否有重叠的爆炸范围。两个气球的距离小于等于它们的爆炸半径之和时,表示它们有重叠。4. 在遍历气球列表的过程中,检查当前气球与visited集合中的气球是否有重叠的爆炸范围。若有重叠,则选择得分值更高的气球加入visited集合,替代原有的气球。5. 遍历完所有气球后,visited集合中保存的即为玩家应该击中的气球。6. 计算visited集合中气球的得分值之和,即为最大得分值。
伪代码:
function is_overlap(ball1, ball2): // 判断两个气球是否有重叠的爆炸范围 distance = sqrt((ball1.x - ball2.x)^2 + (ball1.y - ball2.y)^2) return distance <= ball1.radius + ball2.radiusfunction shooting_game(balloons): visited = set() max_score = 0 for i in range(len(balloons)): if i not in visited: // 未被击中过的气球 visited.add(i) max_score += balloons[i].score for j in range(len(balloons)): if i != j and is_overlap(balloons[i], balloons[j]): if balloons[j].score > balloons[i].score: visited.remove(i) max_score -= balloons[i].score visited.add(j) max_score += balloons[j].score return max_score// 测试balloons = [(1,2,3), (2,5,4), (3,1,2), (4,9,5)]max_score = shooting_game(balloons)print(max_score)
贪心算法解决数组重组问题
算法问题描述:
给定一个整数数组nums,现在需要将数组中的元素重新排列,使得任意两个相邻的元素之间的差的绝对值尽可能大。请实现一个函数,返回重组后的数组。注意,重组后的数组可能不是唯一的,只需返回任意一个满足条件的数组即可。
样例输入输出:
输入:[1, 2, 3, 4, 5]输出:[1, 3, 2, 4, 5]
解题思路:
1. 对数组进行排序,从小到大。2. 创建一个空的结果数组result[],并将排序后的第一个元素nums[0]加入result[]。3. 从第二个元素开始遍历排序后的数组,逐个将元素插入result[]。4. 奇数索引位置上的元素应该尽量取较大的值,所以将当前元素插入result[]的奇数索引位置。5. 偶数索引位置上的元素应该尽量取较小的值,所以将当前元素插入result[]的偶数索引位置。6. 遍历完所有元素后,result[]即为重组后的数组。
伪代码:
function rearrange_array(nums): sorted_nums = sort(nums) result = [] result.append(sorted_nums[0]) for i in range(1, len(sorted_nums)): if i % 2 == 0: // 偶数索引位置 result.insert(i, sorted_nums[i]) else: // 奇数索引位置 result.append(sorted_nums[i]) return result// 测试nums = [1, 2, 3, 4, 5]rearranged_nums = rearrange_array(nums)print(rearranged_nums)
输出:[1, 3, 2, 5, 4]
贪心算法解决左右两边元素和相等问题
算法问题描述:
给定一个整数数组nums,现在需要判断是否存在一个索引,使得索引左边的元素之和等于索引右边的元素之和。如果存在这样的索引,返回True;否则,返回False。
样例输入输出:
输入:[1, 7, 3, 6, 5, 6]输出:True
解题思路:
1. 遍历数组,计算数组中所有元素的和,得到总和total。2. 初始化左侧元素之和left_sum为0。3. 从左到右遍历数组,每次将当前元素加入左侧元素之和left_sum,同时将总和total减去当前元素。4. 在遍历的过程中,检查左侧元素之和left_sum是否等于右侧元素之和total减去当前元素的值。若相等,表示存在满足条件的索引,返回True。5. 若遍历完所有元素后仍未找到满足条件的索引,则返回False。
伪代码:
function equal_sum(nums): total = sum(nums) left_sum = 0 for i in range(len(nums)): total -= nums[i] // 将总和减去当前元素 if left_sum == total: return True left_sum += nums[i] // 将当前元素加入左侧元素之和 return False// 测试nums = [1, 7, 3, 6, 5, 6]has_equal_sum = equal_sum(nums)print(has_equal_sum)
输出:True
贪心算法解决图着色问题
算法问题描述:
给定一个无向图,图的顶点由一个整数标识,图的边由一个无序的顶点对表示。要求为图的每个顶点分配一个颜色,同时要求相邻的顶点不能有相同的颜色。现在需要设计一个算法,使用贪心算法解决图着色问题,即找到符合要求的最小颜色数量。
Vertices: [1, 2, 3, 4, 5, 6]Edges: [(1, 2), (1, 3), (2, 4), (3, 4), (4, 5), (5, 6)]
样例输入
graph = { 1: [2, 3], 2: [1, 4], 3: [1, 4], 4: [2, 3, 5], 5: [4, 6], 6: [5]}
输出:3
解题思路:1. 创建一个字典colors,用于存储每个顶点的颜色值。初始时,将所有顶点的颜色初始化为-1,表示未分配颜色。2. 对图中的每个顶点进行遍历,对于每个顶点v,执行以下操作: 1) 创建一个集合used_colors,用于存储v的邻接顶点已经使用的颜色值。 2) 遍历v的邻接顶点,将颜色值加入到used_colors集合中。 3) 遍历颜色值1到无穷大的整数,找到一个未被used_colors集合包含的最小整数,将此整数作为v的颜色值。3. 返回字典colors中颜色值的种类数量。
伪代码:
function graphColoring(graph): colors = {} // 创建一个字典,存储每个顶点的颜色 for each vertex v in graph: used_colors = set() // 创建集合,存储v的邻接顶点已分配的颜色值 for each adjacent_vertex in v.adjacent_vertices: if colors[adjacent_vertex] != -1: // 如果邻接顶点已分配颜色 used_colors.add(colors[adjacent_vertex]) for color in range(1, infinity): // 从1到无穷大的整数 if color not in used_colors: // 找到一个未被邻接顶点使用的最小颜色 colors[v] = color break return number of distinct colors in colors
其中,graph表示输入的无向图,每个顶点的颜色值存储在字典colors中。最后,返回colors中不同颜色值的数量。
关键词:
【技术积累】算法中的贪心算法【三】_环球速读
女模砸评委后续:正面照曝光,疑全部模特均被潜规则,比赛很公平-全球快播报
至少涨价1500元该买还是买!iPhone 15备货量曝光:苹果出手近亿台-天天热推荐
【天天播资讯】19岁少年为救陌生姐姐放弃考试 网友点赞:换你会做吗?
【播资讯】特斯拉L3能力藏不住了!无需手扶方向盘:966公里0提醒接管
当前热议!今天周日调休上班!iPhone闹钟没响用户被坑:苹果本土化服务为啥不行?
广东高考今日放榜 26日17时前可提出复查分数申请_全球头条
焦点信息:联通2000M宽带有多快?中国联通小姐姐:下200分钟4K电影仅78秒
48GB内存笔记本正式上市 插满可扩至96GB
清华大学校长呼吁本科毕业生:不要过度关注个人利益 会烦恼焦虑 世界即时看
为什么119灭火不直接对准火源射水?消防员专业揭秘 全球关注
当前动态:《上古卷轴5:天际》4代湮灭Mod实机演示
『题解』BZOJ3462 DZY Loves Math II
读发布!设计与部署稳定的分布式系统(第2版)笔记11_无限长的结果集
10万元到1万元 激光电视降价为了什么
全球新消息丨ASML:芯片供应链脱钩自主生产不可能 美国日本也不例外
全球速讯:k8s 深入篇———— pod 深入实战[七]
CAP定理
【环球速看料】强化学习从基础到进阶-常见问题和面试必知必答[4]::深度Q网络-DQN、double DQN、经验回放、rainbow、分布式DQN
《消失的她》票房破5亿:打破44项影史纪录 端午档最强国产悬疑电影诞生 全球最新
五年来最火端午假期正式结束!这些城市最热门 你去了吗?
鸿海加快iPhone 15在印度量产:与中国大陆时间差将缩减至一个月-天天速递
400万播放量 救不了东北偶像
标压i7+32GB仅2999元 这款迷你主机能入手吗?实测来了
党的最大优势是党执政后的最大危险是_党执政后的最大危险是
全球新消息丨韩国yg公司旗下艺人_韩国yg公司
每日动态!使用libavcodec将mp3音频文件解码为pcm音频采样数据【[mp3float @ 0x561c1ec49940] Header missing
小试Blazor——实现Ant Design Blazor动态表单
焦点快看:【解决方法】按键精灵 实现 狂野飙车9 自动领取每日广告卡牌包 (1)
k360次列车硬卧分布图(k360次列车)|天天时讯
安徽唯一盲人考生 高考成绩出来了:311分
因脑溢血开颅3次的少年高考445分 母亲:努力有了结果
k8s 深入篇———— pod 实战[六]
garage两种读音_garage怎么读有几种读法是对的
观焦点:女子醉酒吐车上 20元都不肯赔 司机怒骂不要脸:网友力挺
环球快报:再获11亿美元投资:蔚来“长期主义”的底气
距离今年“召回王”又进一步 本田海外召回超百万辆汽车
法媒:罗马准备听取对贝洛蒂的报价,意甲英超西甲多队有意
腾讯两大国民APP账号又打通了!QQ悄然支持微信登陆 有了微信为啥仍离不开QQ?
2023年端午小长假收官:1.06亿人次出游 满血超越2019-当前热讯
【世界独家】word安装(ppt、excel),以及word的常用设置
【当前独家】Blazor开发小游戏?趁热打铁上!!!
当前热门:火狐主页diy设置以及常用的扩展
DZY Loves Math|全球即时看
女生发烧考出618分:一蹦三尺高 挨个房间报喜
每日消息!ChatGPT漏洞 讲故事送Window11激活Key!
世界快播:刘慈欣谈ChatGPT:人类的无能反而是人类最后的屏障
今日热议:关于高考志愿填报,这些热点问题需要关注
缓存一致性如何保障
推出长达7年:任天堂股东质疑Switch已逼近极限
实时焦点:苹果前总监炮轰App Store存在灰色地带 标准随心所欲
三乙醇胺油酸皂商品报价动态(2023-06-24)
救命一声吼!山洪暴发女子大喊提醒救下多名游客 世界讯息
索尼PS5串流掌机价格曝光:最高2100元能接受么?
全球视点!泰坦号观光潜艇“打破常规留名后世”,老板一语成谶片受热议
DLang 与 C 语言交互
Apollo2.1.0+Springboot使用OpenApI
邮箱:微信企业域名邮箱给gmail或hotmail等域外邮箱发邮件被退回问题如何解决? 环球观焦点
今日热门!Stable Diffusion模型发布新版本:生成图像以假乱真
钻石价格,突发“跳水”!未来还会更便宜?
使用python发送sip协议的OPTIONS 热门
k8s 深入篇———— k8s 的pod[五]-全球播资讯
8. Java-AOP 面向切面编程
文心一言 VS 讯飞星火 VS chatgpt (46)-- 算法导论6.1 4题|全球热点评
泰坦号事故后:加拿大将展开事故调查
车主自曝差点被闷死在特斯拉Model X里 车门锁死 原因揭晓
蔡徐坤巡演新加坡站开票 《Hug me(remix版)》同日上线
来一打自建IP Proxy玩玩之Majora
kafka学习之五_多个磁盘的性能验证 世界快看点
Go——常用函数
每日速递:卷福的十年同学会
每日简讯:4亿票房端午黑马:《消失的她》官宣海外定档
冲入球场拥抱梅西小伙获释后道歉:我真不是没素质的人
世界观天下!新会绿美生态园票价(新会绿美生态园票价多少钱)
腾讯两大国民APP账号又打通了?QQ悄然支持微信登陆 环球精选
环球快报:调查称安卓更易上手:iPhone用户遇到问题概率高出58%
java 异常处理,事务管理,事务共用,事务传递 天天微头条
Go-闭包和defer|最新资讯
环球热资讯!Zen3清库存?突然冒出个很特别的锐龙5 5700
虚幻5打造!腾讯动漫《斗罗大陆2》今日两集首播 霍雨浩初入星斗大森林|每日观察
“空中出租车”亮相巴黎航展:可降落空间直径仅需15米-环球速递
古力娜扎曾遭换脸视频威胁勒索:不给钱就毁了你!
男生单曲循环《好运来》查出593分大哭:比平时多出50分 超常发挥
全球钻石价格较峰值暴跌18%:人造钻石市场规模不断扩大_全球视点
环球最新:甲亢遇到异食癖:法国男子一顿吃15人份 急了还吃石头木塞
全球热点评!公鸡突然从背后“偷袭”萌娃 飞起两脚踹倒在地 第二天端午节就被炖了
泰国和美国两地大量鱼类死亡 或与海洋升温有关 快看点
【技术积累】C语言中的指针【一】_世界百事通
Go-自定义数据类型(函数类型)详解
行业风险管理需求强烈
焦点信息:AMD RX 7800被逼急了!硬塞进去个“大胖子”
世界视点!一考生查分 全家一起喊出“666”:打算冲击复旦、交大
Kafka学习之四_Grafana监控相关的学习
一天吃透MySQL面试八股文 环球微速讯
什么是大模型? 每日热讯
内马尔在足球界的地位_内马尔的盘带水平在足球史上处于什么地位 全球要闻
【环球财经】伦敦金属交易所基本金属23日多数下跌_全球信息
白玉兰奖完整名单出炉 年初大热电视剧《狂飙》挂零陪跑-天天实时
中国高空开伞试验运载器发射连续成功:木星、天王星我们来了! 今日热讯
男子微信回了个“OK”表情 结果竟成被告!一点都不冤 速读