当前位置: 首页 > news >正文

算法练习Day25 (Leetcode/Python-贪心算法)

贪心算法基本概念:

贪心的本质是通过选取局部最优达到全局最优。

并没有固定的套路,检验的算法正确性的办法可以是举反例。

455. Assign Cookies

Assume you are an awesome parent and want to give your children some cookies. But, you should give each child at most one cookie.

Each child i has a greed factor g[i], which is the minimum size of a cookie that the child will be content with; and each cookie j has a size s[j]. If s[j] >= g[i], we can assign the cookie j to the child i, and the child i will be content. Your goal is to maximize the number of your content children and output the maximum number.

Example 1:

Input: g = [1,2,3], s = [1,1]
Output: 1
Explanation: You have 3 children and 2 cookies. The greed factors of 3 children are 1, 2, 3. 
And even though you have 2 cookies, since their size is both 1, you could only make the child whose greed factor is 1 content.
You need to output 1.

思路:分饼干,一个饼干最多分给一个人,若饼干大小>=孩子胃口则该孩子获得满足,设计算法尽可能满足更多的孩子。

这道题用贪心算法做,先对饼干和孩子排序。可以从大饼干和胃口大的孩子开始遍历,本着不浪费的原则,大饼干优先满足大胃口的孩子,对于每一块饼干,将胃口从大到小的孩子和它一一对应,如果满足了一个孩子,则move to下一块次大的饼干。

class Solution(object):def findContentChildren(self, g, s):""":type g: List[int] # children :type s: List[int] # cookies:rtype: int"""g.sort() # small to large s.sort() # small to large j = len(s) - 1  # cookiesmatched = 0for i in range(len(g) - 1, -1, -1):if j < 0:  # Check if there are any cookies leftbreakif s[j] >= g[i]:  # If the current cookie satisfies the appetite, move to the next cookiematched += 1j -= 1return matched

时间复杂度的分析:

sort:O(nlogn),O(mlogm)。n和m分别为人和饼干的个数

for循环:O(n)。

Overall:O(nlogn) + O(mlogm)。对于较小的n值,O(n)和O(n log n)可能相当接近。但随着n的增大,O(n log n)的增长速度将超过O(n)。

53. Maximum Subarray

Given an integer array nums, find the 

subarray

 with the largest sum, and return its sum.

Example 1:

Input: nums = [-2,1,-3,4,-1,2,1,-5,4]
Output: 6
Explanation: The subarray [4,-1,2,1] has the largest sum 6.

思路:求最大连续子序列之和。暴力解法O(n^2)的复杂度,做两次循环,遍历所有可能的子序列。但是也可以用一个count逐位累加,在这个过程中不断更新max_count的值。若累加值为负数,则清空重开一局,也就是以之后一个元素为新的子序列开头,防止之前子序列的负数造成拖累。

class Solution(object):def maxSubArray(self, nums):""":type nums: List[int]:rtype: int"""count = 0max_count = float('-inf') # 注意这里是float('-inf')而不是0,有可能最大和也是是负数。for i in range(len(nums)):count += nums[i]if count > max_count: # 注意这两个if的顺序不可以颠倒max_count = countif count <= 0: # 若当前子序列累加和都小于0了,对继续延长的序列的也是拖累,不如重新开始。# 重新开始计数之前这个子序列的最大和已经被记录下来了。count = 0 return max_count # 时间复杂度O(n)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Halcon闭运算closing
  • c语言内嵌汇编知识点记录
  • 牛客周赛 Round 26 解题报告 | 珂学家 | 0-1 BFS + 状态机DP
  • 《Linux详解:深入探讨计算机基础》
  • 2023.12.30力扣每日一题——一周中的第几天
  • 六、typescript泛型使用
  • Django 后台与便签
  • 苹果电脑Dock栏优化软件 mac功能亮点
  • 基于MATLAB编程的BP神经网络土地分类,bp神经网络详细原理
  • 2023年十篇具有影响力的人工智能研究论文
  • HarmonyOS4.0系统性深入开发07创建一个ArkTS卡片
  • SQL常见面试题
  • C++:继承(这一篇就够了)
  • css视觉格式化模型
  • JavaScript 中常用事件
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Docker 笔记(2):Dockerfile
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • JavaScript的使用你知道几种?(上)
  • jquery ajax学习笔记
  • scrapy学习之路4(itemloder的使用)
  • 基于axios的vue插件,让http请求更简单
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 前端之Sass/Scss实战笔记
  • 项目管理碎碎念系列之一:干系人管理
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #define用法
  • (02)Unity使用在线AI大模型(调用Python)
  • (10)STL算法之搜索(二) 二分查找
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (笔试题)分解质因式
  • (二)windows配置JDK环境
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)计算机毕业设计高校学生选课系统
  • (利用IDEA+Maven)定制属于自己的jar包
  • (算法)N皇后问题
  • (算法)硬币问题
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • ******IT公司面试题汇总+优秀技术博客汇总
  • . Flume面试题
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net 设置默认首页
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .Net中ListT 泛型转成DataTable、DataSet