贪心算法练习day2

删除字符

1.题目及要求

2.解题思路

1)初始化最小字母为‘Z’,确保任何字母都能与之比较

2)遍历单词,找到当前未删除字母中的最小字母

3)获取当前位置的字母  current = word.charAt(i);

4)删除最小字母之前的所有字母  word=word.substring(index+1);

5)  将最小字母添加到结果字符,更新剩余可删除字母数量 t -= index ;

3.详细代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String word=scan.next();
        int t=scan.nextInt();//删除字母的数量
        char min;
        char current;//存储当前遍历到的字母
        int index=0;//从左到右t个字母中最小字母的位置,找到将其保存,并且删除它之前的所有字母,之后的字母去它后面寻找
        String result="";//存储结果单词
        while(t>0){
            min='Z';
            for (int i = 0; i < word.length(); i++) {
                current=word.charAt(i);
                if(current<min){
                    min=current;
                    index=i;
                }
            }
            //获取到t个字母里面的最小字母之前的字母数,删除操作
            word= word.substring(index+1);//第一趟确定第一小的字母,第二趟第二小,以此类推
            result+=min;
            t-=index;//还能删除的字母数量
        }
        System.out.println(result+word);//记得把word剩余的字母补上哦
        scan.close();
    }
}

4.学习要点

1)读取用户输入的字符,字符串,整数...等等

Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
char a = scan.next().charAt(0);
int a = scan.nextInt();

2)charAt(int index) String类的一个方法

 3)substring()

搬砖

1.题目及要求

2.解题思路

贪心+01背包+排序

先循环输入每件物品的重量,价值,以及重量价值之和,存放到二维数组里。

然后依据数组里的某一特性进行排序,用到Arraya.sort()方法

外层循环遍历每件物品。内层循环从背包的最大容量到当前物品的重量。

3.详细代码

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        final int count = scan.nextInt();
        int[][] structs = new int[count + 1][3]; // 这里用数组。注意:Record类(类似C语言结构体)是Java14特性,不能用
        int capacity = 0;
        for (int i = 1; i <= count; ++i) {
            int wi = scan.nextInt(), vi = scan.nextInt();
            capacity += wi;
            structs[i][0] = wi;
            structs[i][1] = vi;
            structs[i][2] = wi + vi;
        }
        scan.close();
        Arrays.sort(structs, Comparator.comparingInt(struct -> struct[2])); // 根据sum排序(lambda表达式,相当于匿名内部类)
        // 这里用滚动数组更方便,因为是倒序遍历,0-1背包滚动数组详解:https://www.bilibili.com/video/BV1BU4y177kY/
        int[] dp = new int[capacity + 1];
        for (int i = 1; i <= count; ++i) {
            int wi = structs[i][0], vi = structs[i][1];
            for (int j = capacity; j >= wi; --j)
                if (j - wi <= vi)
                    dp[j] = Math.max(dp[j - wi] + vi, dp[j]);
        }
        Arrays.sort(dp);
        System.out.println(dp[capacity]);
    }
}

4.学习要点

1)Arrays.sort()方法

2)i++,++i ;

3)循环输入每个物品的信息

      for (int i = 1; i <= count; ++i) {
            int wi = scan.nextInt(), vi = scan.nextInt();
            capacity += wi;
            structs[i][0] = wi;
            structs[i][1] = vi;
            structs[i][2] = wi + vi;
        }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【动态规划】【组合数学】1866. 恰有 K 根木棍可以看到的排列数目

作者推荐 【深度优先搜索】【树】【有向图】【推荐】685. 冗余连接 II 本文涉及知识点 动态规划汇总 LeetCode1866. 恰有 K 根木棍可以看到的排列数目 有 n 根长度互不相同的木棍&#xff0c;长度为从 1 到 n 的整数。请你将这些木棍排成一排&#xff0c;并满足从左侧 可以…

并发编程-JUC-原子类

JUC 整体概览 原子类 基本类型-使用原子的方式更新基本类型 AtomicInteger&#xff1a;整形原子类AtomicLong&#xff1a;长整型原子类AtomicBoolean &#xff1a;布尔型原子类 引用类型 AtomicReference&#xff1a;引用类型原子类AtomicStampedReference&#xff1a;原子更新…

yolov5的Mosaic原理解析

众所周知&#xff0c;yolov5中使用了mosaic增强进行数据增强&#xff0c;效果就是将4张图片拼凑为1张图片。为了更好优化自定义任务&#xff0c;特对mosaic原理进行解析。 1、mosaic原理解析 mosaic增强的原理一张图就可以解释&#xff1a; 1.1 图的注释 首先高亮区域&am…

河北省公务员考试照片上传不成功

河北省公务员考试报名照片审核太严格了 费了好长时间照片上传不成功&#xff0c;原来少了这一步 没报名得姐妹&#xff0c; 不要拿大图直接压缩小于10kb上传&#xff0c; 不通过&#xff0c;图片还会变模糊 选择这个模板做&#xff0c; 建议电脑报名&#xff0c;使用照片处理工…

【Linux】---Linux下基本指令(2)

目录 一、指令详细介绍1.1 cat 指令1.2 echo 指令1.3 more 指令1.4 less 指令1.5 head 指令1.6 tail 指令1.7 date 指令1.8 cal 指令1.9 find 指令1.10 grep 指令1.11 zip/unzip 指令1.12 tar 指令1.13 uname –r 指令&#xff1a; 一、指令详细介绍 1.1 cat 指令 语法&#…

Dom节点继承树基本操作

遍历节点树 基于元素节点树的遍历 parcntElcrmcnt -> 返回当前元素的父元秦节点 (IE不兼容)children ->只返回当前元素的元素子节点node.childFlement(ount nodechildren.length当前元素节点的子元素(IE不兼容)firstElementChild->返回的是第一个元素节点(IE不兼容)l…

07 按键控制 LED

按键简介 按键开关是一种电子开关&#xff0c;属于电子元器件类。常见的按键开关有两种&#xff0c;第一种是轻触式按键开关&#xff08;简称轻触开关&#xff09;&#xff0c;使用时以向开关的操作方向施加压力使内部电路闭合接通&#xff0c;当撤销压力时开关断开&#xff0…

unity学习(22)——客户端与服务器合力完成注册功能(4)数据库化

单纯的账号密码这种非频繁读写&#xff0c;实现起来很简单的&#xff0c;游戏的属性信息到时候也许会比较麻烦。 思路&#xff1a;每次加入有新键值TryAdd&#xff0c;如果加入成功&#xff0c;直接重写账号密码文件即可。 C#JsonConvert.DeserializeObject反序列化与JsonCon…

15-55V输入自动升降压 光伏MPPT自动跟踪充电方案 大功率300瓦

1.MPPT原理--简介 MPPT&#xff0c;全称为Maximum Power Point Tracking&#xff0c;即最大功点跟踪&#xff0c;它是一种通过调节电气模块的工作状态&#xff0c;使光伏板能够输出更多电能的电气系统能够将太阳能电池板发出的直流电有效地贮存在蓄电池中&#xff0c;可有效地…

0205-2-数据链路层

第 3 章 数据链路层 使用点对点信道的数据链路层 数据链路和帧 数据链路层使用的信道主要有以下两种类型&#xff1a; 点对点信道。这种信道使用一对一的点对点通信方式。广播信道。这种信道使用一对多的广播通信方式&#xff0c;因此过程比较复杂。广播信道上连接的主机很多…

程序员金三银四跳槽指南:时间线经典面试16问

祝大家成功上岸&#xff0c;升职加薪&#xff0c;冲鸭 &#x1f389; 金三银四 今天复工&#xff0c;就要开始准备啦&#x1f4bc;✨ 把握好打工人跳槽的金三银四&#xff0c;获得满意的新工作 &#x1f389; 时间线 年后跳槽时间线&#xff0c;过完年刚好开始准备&#xf…

COMSOL Multiphysics在超材料与超表面仿真中的应用

随着科技的飞速发展&#xff0c;超材料和超表面作为新兴研究领域&#xff0c;吸引了广泛关注。它们通过人工设计的结构&#xff0c;能够在特定条件下表现出特殊的物理性质&#xff0c;为光电子领域带来革命性的变革。COMSOL Multiphysics作为一款强大的多物理场仿真软件&#x…

vue 实现docx文件在线预览

预览请求步骤&#xff1a; 准备一个需要预览的文件地址【如:https://usdoc.cn/vw/文件模板.docx】GET 参数到请求地址将拼接好的地址放在浏览器中&#xff0c;开始预览 请求地址&#xff1a;https://vw.usdoc.cn/ 请求方式&#xff1a;GET 请求参数: 字段名称字段类型必填参数…

WordPress主题YIA在广告位添加图片广告时下方有空白怎么办?

YIA主题设置中默认有4个广告位&#xff0c;而侧边栏的广告位由站长自行添加。boke112百科在这些广告位添加图片广告后发现图片下方有空白&#xff0c;导致下方的两个角没有变圆角&#xff0c;看起来也有点不好看。具体如下图所示&#xff1a; 其实&#xff0c;这个问题就是典型…

Spring Security基础学习

一、SpringSecurity框架简介 二、SpringSecurity入门案例 三、SpringSecurity Web权限方案 四、SpringSecurity微服务权限方案 五、SpringSecurity原理总结

Model / View结构

红色部分是可以直接使用的。 QFileSystemModel; QFileSystemModel的使用&#xff1a; 头文件&#xff1a; QFileSystemModel* model nullptr; cpp文件&#xff1a; model new QFileSystemModel; model->setRootPath(QDir::currentPath()); ui->listView->setModel…

微信小程序:实现微信小程序应用首页开发 (本地生活首页)

文章目录 小程序应用页面开发1、创建项目并配置项目目录结构配置导航栏效果三、配置 tabBar 效果四、轮播图实现4.1 创建轮播图数据容器4.2 定义一个请求轮播图数据的接口4.3 页面加载调用 数据请求接口 五、九宫格实现5.1 获取九宫格数据5.2 结构和样式的完善六、图片布局实现…

普中51单片机学习(九)

蜂鸣器 蜂鸣器简介 在单片机应用的设计上&#xff0c;很多方案都会用到蜂鸣器&#xff0c;大部分都是使用蜂鸣器来做提示或报警&#xff0c;比如按键按下、开始工作、工作结束或是故障等等。改变单片机引脚输出波形的频率&#xff0c;就可以调整控制蜂鸣器音调&#xff0c;产…

Qt的基本操作

文章目录 1. Qt Hello World 程序1.1 通过图形化界面的方式1.2 通过代码的方式实现 2. Qt 的编码问题3. 使用输入框实现hello world4. 使用按钮实现hello world5. Qt 编程注意事项6. 查询文档的方式7. 认识Qt坐标系 1. Qt Hello World 程序 1.1 通过图形化界面的方式 我们先讲…

Autosar --- CAN Driver标准解读

前言 本文是对Autosar文档的翻译与解读&#xff0c;通过对规范的理解&#xff0c;加上实际的应用来一一对应&#xff0c;方便大家更好的理解。 注意&#xff1a;本文并非完全的按照【AUTOSAR_SWS_CANDriver.pdf】来进行翻译的。文章内容的标题与【AUTOSAR_SWS_CANDriver.pdf】保…