贪心算法的题目

news2024/10/6 5:59:52

每一步都做出一个局部最优的选择,最终的结果就是全局最优

只有一部分问题才能用贪心算法(严格来讲,一个问题能不能用贪心算法需要证明的)

2022.8.30 蔚来笔试题:

有a个y,b个o,c个u,用这些字母拼成一个字符串,三个相邻的字母you则可以获得2分,两个相邻的字母是oo则可以得到1分(注意如果四个o:oooo,这种情况是得3分的而不是两分),问最多可以得到多少分?

解答:用贪心,先拼出尽可能多的you出来(因为you的分数最高),剩下的再拼oo

class Solution
{
   //传入a,b,c分别代表y,o,u的个数
   public int score(int a,int b,int c)
   {
      //求出a,b,c中最小的数,最小的数=最多可以拼出you的个数
      int num1=Math.min(Math.min(a,b),c);
 
      //用完num1个y,num1个o,num1个c来拼出num1个you,求出还剩下多少个o
      b=b-num1; 
       
      //用剩下的o拼成oo,起码还剩下两个才能拼出oo
      if(b>=2)
      {
         return num1*2+b-1;
      }
      else
      {
        return num1*2;   
      }
   }
}

力扣976  三角形的最大周长

先将数组排序,每次选取最大的三个数,如果能凑成三角形就是周长最大的三角形

class Solution 
{
    public int largestPerimeter(int[] nums) 
    {
        Arrays.sort(nums);

        for(int i=nums.length-1;i>=2;i--)
        {
           if(nums[i-1]+nums[i-2]>nums[i])
           {
               return   nums[i]+nums[i-1]+nums[i-2];
           }
        }
        
        return 0;
    }
}

给你多个形如[start,end]的闭区间,求出最多有几个互不相交的区间

比如[1,3],[2,4].[3,6]三个区间,最多有两个区间互不相交

这个问题在生活中的应用广泛,比如你今天有好几个活动,每个活动都可以用区间 [start, end] 表示开始和结束的时间,请问你今天最多能参加几个活动呢?(你一个人不能同时参加两个活动)

有很多种贪心的设想

(1)哪个会议开始的早就参加哪个会,一直贪下去

(2)哪个会议时间短就参加哪个会,一直贪下去

(3)哪个会议结束的早,就参加哪个会,一直贪下去

最终发现第三种贪心策略是对的

step1:从所有区间中找到结束最早的那个区间(也就是end最小的那个区间),假设这个区间是x

step2:然后将所有和这个x区间相交(有重叠)的区间都从区间集合里删除

重复步骤1,2,直到区间集合为空,之前选出的那些x的数量就是最多可以参加的活动数

 //current表示滑到哪个会议了(第0个会议,第1个会议,第2个会议......),

index表示是和第几个会议进行比较

result用来统计总共可以参加几个会议

Arrays.sort(nums,(a,b)->(a[1]-b[1]) )

int  index=0;
int  current=1; 
int  result=1;

while(current<nums.length-1)
{
   while(nums[current][0]<nums[index][1])//current一直滑到和index这个区间没有重叠的为止
   {
        current++;
   }
   index=current;
   result++;
}

 切法一:

 切法二:

哈夫曼编码问题

 比如数组为[2,3,4,7,9,2]

先把所有的数放到小根堆里面

每一次弹出两个数,进行结合,然后把结合得到的数继续放到小根堆里面去

然后重复上面的步骤,继续弹出两个数,进行结合,将得到的数继续放到小根堆里面去......

public class tanxin
{
    public static void main(String[] args)
    {
        int[]  nums={2,3,4,7,9,2};

        PriorityQueue<Integer> pq=new PriorityQueue<>();

        //所有数字扔到小根堆里去
        for(int i=0;i<nums.length;i++)
        {
           pq.add(nums[i]);
        }

        int sum=0;
        int cur=0;//用来计算每次弹出的两个数之和

        while(pq.size()>1)
        {
            cur=pq.poll()+pq.poll();
            sum=sum+cur;
            pq.add(cur);
        }
        System.out.println(sum);
        return;

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/179800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Anaconda软件中的 Environments 及 Jupyter Lab使用方法介绍

来源&#xff1a;投稿 作者&#xff1a;助教-Frank 编辑&#xff1a;学姐 本篇是打造舒适的AI开发环境系列-软件篇1 上期内容&#xff1a;学人工智能电脑&主机八大件配置选择指南 本文的重点&#xff1a; (1)Environments使用中如何安装python包.; (2)Jupyter Lab如何在…

Kettle(6):表输入组件——mysql转mysql

1 需求 前面我们已经将Excel中数据抽取到了MySQL的t_user表中。 现在有了新需求&#xff0c;要将MySQL数据库中的 t_user 表中的数据抽取出来&#xff0c;装载到另外一张表 t_user1中。 2 构建Kettle数据流图 2.1 从核心对象的输入组件中&#xff0c;将「表输入」组件拖拽到中…

电脑下载软件用什么软件好?安卓手机下载软件用哪个软件好?IDM下载器说:在做的都是弟弟

大年初五&#xff0c;迎财神&#xff0c;先祝大家新的一年财源滚滚&#xff0c;接下来为大家分享超级经典的IDM下载器&#xff0c;电脑端毫无争议的下载工具&#xff0c;安卓平台idm也是力压群雄&#xff0c;下面就为大家详细分享下&#xff1a; 1&#xff1a;1DM下载器&#x…

微服务统一登陆认证怎么做

[微服务统一登陆认证怎么做}&#xff1f;JWT 无状态登录原理 1.1.什么是有状态&#xff1f; 有状态服务&#xff0c;即服务端需要记录每次会话的客户端信息&#xff0c;从而识别客户端身份&#xff0c;根据用户身份进行请求的处理&#xff0c;典型的设计如tomcat中的session…

notepad++在行首行尾添加字符 | 选中列

目录 1、首行/尾行添加字符 1【使用快捷键 CtrlH】 2【^为行首、$为行尾】 3、查找模式选中正则表达式 2、Notepad中列选(竖选&#xff09; 1、首行/尾行添加字符 1【使用快捷键 CtrlH】 或者鼠标 2【^为行首、$为行尾】 3、查找模式选中正则表达式 2、Notepad中列选(竖…

深度学习入门(一)感知机

该文将介绍感知机A&#xff08;perceptron&#xff09;这一算法。感知机是由美国学者Frank Rosenblatt在1957年提出来的。为何我们现在还要学习这一很久以前就有的 算 法 呢 &#xff1f; 因 为 感 知 机 也 是 作 为 神 经 网 络&#xff08;深 度 学 习&#xff09;的起源的算…

详解Windows通过命令行查看电脑连接过的WIfI密码

CONTENT打开命令行进入命令行下的netsh工具查看连接过的WiFi名称指定WiFi名称查看密码在Windows操作系统中&#xff08;PS&#xff1a;Windows Vista及以后的Windows系统&#xff09;可以通过命令行工具netsh查看和更改电脑的无线连接设置&#xff0c;包括WiFi。本篇博客将详细…

C语言进阶——文件管理

每当我们写好一段代码运行结束之后&#xff0c;再次运行的时候就会发现&#xff0c;之前在终端上输入的数据都会消失&#xff0c;那么如何把之前输入的数据保存下来呢&#xff1f; 我们一般把数据持久化的方式有把数据存放在磁盘文件中、存放到数据库。打印等方式进行保存。 …

Java---微服务---elasticsearch安装部署

elasticsearch安装部署1.部署单点es1.1.创建网络1.2.加载镜像1.3.运行2.部署kibana2.1.部署2.2.DevTools3.安装IK分词器3.1.在线安装ik插件&#xff08;较慢&#xff09;3.2.离线安装ik插件&#xff08;推荐&#xff09;1&#xff09;查看数据卷目录2&#xff09;下载并解压缩分…

RocketMQ源码本地搭建调试

1 GitHub源码 git clone https://github.com/apache/rocketmq.git导入IDEA&#xff0c;可在命令行执行mvn compile一下&#xff0c;保证源码能够正确编译。本次我使用的master分支的版本-4.8.0。下面我们开始准备启动Namesrv。 2 启动Namesrv 到namesrv模块找到NamesrvStart…

web游戏---canvas基础图形

基础 canvas标签 canvas是H5中新推出的标签&#xff0c;这个提供一块画布&#xff0c;可以在上面绘制图案&#xff0c;通过这种方式制作web游戏带来的性能消耗比操作DOM要小的多。 如果知做浏览器游戏&#xff0c;为了保证性能最好使用画布来制作。 坐标系 画布的坐标系和…

ThinkPadE540重装系统

过年这段时间&#xff0c;帮家里人重装了一下win10系统&#xff0c;在这里记录一下&#xff0c;方便今后还要使用。 先准备两个U盘&#xff0c;一个存储电脑的文件&#xff08;以防文件丢失&#xff09;&#xff0c;一个空u盘&#xff08;制作重装系统的&#xff09; 一.下载镜…

【5-卷积神经网络】北京大学TensorFlow2.0

课程地址&#xff1a;【北京大学】Tensorflow2.0_哔哩哔哩_bilibiliPython3.7和TensorFlow2.1六讲&#xff1a;神经网络计算&#xff1a;神经网络的计算过程&#xff0c;搭建第一个神经网络模型神经网络优化&#xff1a;神经网络的优化方法&#xff0c;掌握学习率、激活函数、损…

Junit单元测试框架【基础篇】

Junit单元测试框架【基础篇】&#x1f34e;一.Junit单元测试框架&#x1f352;1.1 注解&#x1f352;1.2 断言&#x1f352;1.3 用例执行顺序&#x1f352;1.4 测试套件&#x1f349;1.4.1 指定类&#x1f349;1.4.1 指定包&#x1f352;1.5 参数化&#x1f349;1.5.1 单参数&a…

VBA提高篇_07 Goto跳转 / Exit退出 /VBA错误处理

文章目录使用逻辑变量控制循环使用Goto语句任意跳转捷径:使用Exit语句跳出结构保险: 使用错误处理改善用户体验On Error Goto Lablex:On Error Resume Next使用逻辑变量控制循环 使用Goto语句任意跳转 经常在错误处理时使用 捷径:使用Exit语句跳出结构 注意: 避免使用while…w…

【C++】AVL树(插入)

文章目录AVL树的概念平衡化旋转右单旋转左单旋转先左后右双旋转先右后左双旋转AVL树的插入根据BST树规则进行节点插入平衡化处理重新连接节点完整的插入函数代码AVL树的验证AVL树的性能AVL树的概念 二叉搜索树虽然可以提高查找的效率&#xff0c;但是二叉搜索树有其自身的缺陷&…

Python与Matlab混合编程案例

前言因为项目需要&#xff0c;需要批处理很多Matlab的.m文件&#xff0c;从每个文件中提取结果合并到一个文件中。 很明显&#xff0c;如果手工统计&#xff0c;几百个文件会累死的。 因此立即想到了Python在批处理方面的优势&#xff0c;因此就在网上找了相关资料&#xff0c;…

C++初阶:vector

文章目录1 vector介绍2 实现vector2.1 类的定义2.2 默认成员函数2.2.1 构造函数2.2.2 析构函数2.2.3 拷贝构造2.2.4 赋值重载2.3访问接口2.4 容量接口2.5 修改接口2.5.1 尾插尾删2.5.2 任意位置插入2.5.3 任意位置删除2.6 其他接口1 vector介绍 1 vector是表示可变大小数组的序…

10+编程语言实现云笔记

目标 为编程初学者打造入门学习项目&#xff0c;使用各种主流编程语言来实现。让想学编程的&#xff0c;一个都不落下。 上述基本涵盖了当前编程开发所有主流语言。 左侧为前端版本&#xff1a;安卓、iOS、鸿蒙、Flutter、Vue、uni-app。 右侧为服务器端版本&#xff1a;Jav…

代码随想录算法训练营三期 day 27 - 回溯 (3) (补)

39. 组合总和 题目链接&#xff1a;39. 组合总和 原文链接&#xff1a;39. 组合总和 视频链接&#xff1a;39. 组合总和 本题和 77.组合 &#xff0c;216.组合总和III 的区别是&#xff1a;本题没有数量要求&#xff0c;可以无限重复&#xff0c;但是有总和的限制。 树形结构&…