✔ ★ 算法基础笔记(Acwing)(六)—— 贪心【java版本】

贪心

  • 一、 区间问题
        • 1. 区间选点
        • 2. 最大不相交区间数量
        • 3. 区间分组(用 堆top 代表区间 头头)
            • POJ3614Sunscreen(优先队列+贪心)
        • 4. 区间覆盖
  • 二、哈夫曼树
        • 1. 合并果子
  • 三、排序不等式
        • 1. 排队打水
  • 四、绝对值不等式
        • 货仓选址
  • 五、推公式
        • 耍杂技的牛

一、 区间问题

1. 区间选点

原题链接
原题链接
在这里插入图片描述

import java.util.*;
class Range implements Comparable<Range>{int l,r;public Range(int l,int r){this.l = l;this.r = r;}public int compareTo(Range o){return Integer.compare(r,o.r);//return this.r - o.r;}
}
public class Main{static int N = 100010,INF = 0x3f3f3f3f,n;static Range[] range = new Range[N];//结构体创建数组需要定义成全局变量public static void main(String[] args){Scanner scan = new Scanner(System.in);n = scan.nextInt();for(int i = 0 ; i < n ; i ++ ){int l = scan.nextInt();int r = scan.nextInt();range[i] = new Range(l,r);}//结构体排序Arrays.sort(range,0,n); //Arrays.sort(range, 0, n, (o1, o2) -> o1.r - o2.r);int res = 0;//表示一共需要多少点int ed = -INF; // 上一个点的右端点for(int i = 0 ; i < n ; i ++ ){if(range[i].l > ed){res ++ ;ed = range[i].r;}}System.out.println(res);}
}
2. 最大不相交区间数量

原题链接
原题链接

import java.util.*;
class Range implements Comparable<Range>{int l,r;public Range(int l,int r){this.l = l;this.r = r;}public int compareTo(Range o){return Integer.compare(r,o.r);//return this.r - o.r;}
}
public class Main{static int N = 100010,INF = 0x3f3f3f3f,n;static Range[] range = new Range[N];//结构体创建数组需要定义成全局变量public static void main(String[] args){Scanner scan = new Scanner(System.in);n = scan.nextInt();for(int i = 0 ; i < n ; i ++ ){int l = scan.nextInt();int r = scan.nextInt();range[i] = new Range(l,r);}//结构体排序Arrays.sort(range,0,n); //Arrays.sort(range, 0, n, (o1, o2) -> o1.r - o2.r);int res = 0;//表示一共需要多少点int ed = -INF; // 上一个点的右端点for(int i = 0 ; i < n ; i ++ ){if(range[i].l > ed){res ++ ;ed = range[i].r;}}System.out.println(res);}
}
3. 区间分组(用 堆top 代表区间 头头)

原题链接
原题链接

POJ3614Sunscreen(优先队列+贪心)

原题链接

import java.util.*;
class Range implements Comparable<Range>{int l,r;public Range(int l,int r){this.l = l;this.r = r;}public int compareTo(Range o){return Integer.compare(l,o.l);}
}
public class Main{static int N = 100010,n;static Range[] range = new Range[N];public static void main(String[] args){Scanner scan = new Scanner(System.in);n = scan.nextInt();for(int i = 0 ; i < n ; i ++ ){int l = scan.nextInt();int r = scan.nextInt();range[i] = new Range(l,r); }Arrays.sort(range,0,n);PriorityQueue<Integer> minheap = new PriorityQueue<>(); // 小根堆for(int i = 0 ; i < n ; i ++ ){Range r = range[i];//小根堆的最小值要大于等于。因为相等也是有交点if(minheap.isEmpty() || minheap.peek() >= r.l) minheap.add(r.r);else{minheap.poll();minheap.add(r.r);}}System.out.println(minheap.size());}
}
4. 区间覆盖

原题链接
原题链接

import java.util.*;
class Range implements Comparable<Range>{int l,r;public Range(int l,int r){this.l = l;this.r = r;}public int compareTo(Range o){return Integer.compare(l,o.l);}
}
public class Main{static int N = 100010;static Range[] range = new Range[N];public static void main(String[] args){Scanner scan = new Scanner(System.in);int st = scan.nextInt();int ed = scan.nextInt();int n = scan.nextInt();for(int i = 0 ; i < n ; i ++ ){int l = scan.nextInt();int r = scan.nextInt();range[i] = new Range(l,r);}Arrays.sort(range,0,n);int res = 0;//答案boolean success = false;//表示成功for(int i = 0 ; i < n ; i ++ ){ // 使用双指针算法,来查找每个 <= st的右端点最长的数int j = i;int end = (int)-(2e9);while(j < n && range[j].l <= st){ // 将所有左端点小于st的数的右端点进行比较,取出最大值end = Math.max(end,range[j].r);j ++ ;}if(end < st)  break; //如果右端点最大的点还小于st的话,就说明覆盖不完整,无解了breakres ++; // 进行到这里就是有一个区间了 +1if(end >= ed){ // 如果进行到这一步完全覆盖了,就标记一下,然后breaksuccess = true;break;}st = end;//没选取一个区间,就将st赋值成这个区间的右端;i = j - 1; //然后将因为我们j是判断了所有的第一个可以选的区间,//所以将这些都不用看了,直接从j开始看,i= j,因为是从0开始的,所以就赋值成j - 1}if(!success) res = -1; //如果没有标记就是说明没有完全覆盖,将结果复制成-1System.out.println(res);//最后输出res}
}

二、哈夫曼树

1. 合并果子

原题链接
原题链接
在这里插入图片描述

import java.util.*;
public class Main{public static void main(String[] args){Scanner scan = new Scanner(System.in);int N = 10010;int n = scan.nextInt();Queue<Integer> minheap = new PriorityQueue<>();for(int i = 0 ; i < n ; i ++ ){int x = scan.nextInt();minheap.add(x);}int res = 0;for(int i = 0 ; i < n ; i ++ ){if(minheap.size() > 1){ // 为什么是大于1呢,如果剩余一组就说明是最后的结果了int a = minheap.poll(); // 将最小的数取出来后弹出int b = minheap.poll(); //将第二小的数取出来后弹出res += a + b;   // 将每一次两堆最小值相加之后的加过累加minheap.add(a + b);//然后将他放入到堆中}}System.out.println(res);}
}

三、排序不等式

1. 排队打水

原题链接
原题链接

import java.util.*;
public class Main{public static void main(String[] agrs){Scanner scan = new Scanner(System.in);int N = 100010;int[] w = new int[N];int n = scan.nextInt();for(int i = 0 ; i < n ; i ++ ){w[i] = scan.nextInt();}Arrays.sort(w,0,n);long res = 0;for(int i = 0 ; i < n ; i ++ ){res += w[i] * (n - i - 1);}System.out.println(res);}
}

四、绝对值不等式

货仓选址

原题链接
原题链接

import java.util.*;
public class Main{public static void main(String[] agrs){Scanner scan = new Scanner(System.in);int N = 100010;int[] a = new int[N];int n = scan.nextInt();for(int i = 0 ; i < n ; i ++ ){a[i] = scan.nextInt();}Arrays.sort(a,0,n);int sum = 0;for(int i = 0 ; i < n ; i ++ ){sum += Math.abs(a[i] - a[n / 2]); // Math.abs -- 求绝对值}System.out.println(sum);}
}

五、推公式

耍杂技的牛

原题链接
原题链接

import java.util.*;
class PII implements Comparable<PII>{int x,y;public PII(int x,int y){this.x = x;this.y = y;}public int compareTo(PII o){return Integer.compare(x,o.x);}
}
public class Main{static int N = 50010;static PII[] p = new PII[N];static int[] s = new int[N];public static void main(String[] args){Scanner scan = new Scanner(System.in);int n = scan.nextInt();for(int i = 0 ; i < n ; i ++ ){int w = scan.nextInt();int s = scan.nextInt();p[i] = new PII(w + s,w); // 存入(体重+强壮值,体重)}Arrays.sort(p,0,n);int res = (int) -1e9;int sum = 0;for(int i = 0 ; i < n ; i ++ ){int w = p[i].y; // 体重int s = p[i].x - w; // 强壮值res = Math.max(res,sum - s); // 减去的是最下面的一个人的强壮值sum += w; //叠罗汉上去一个人就得叠加重量}System.out.println(res);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

气传导和骨传导耳机哪个好?气传导耳机好用吗?气传导耳机推荐

​气传导和骨传导耳机都是不入耳设计&#xff0c;骨传导是通过振动颅骨传达声音信号 骨传导耳机是一种能够通过振动颅骨来传达声音信号的耳机&#xff0c;其原理是利用骨传导技术&#xff0c;将声音信号通过颅骨传达到内耳&#xff0c;从而实现听觉效果&#xff0c;不过长时间佩…

YashanDB向量化执行引擎如何给海量数据分析提速

作者介绍&#xff1a;李伟超&#xff0c;数据库系统架构师&#xff0c;YashanDB架设技术开发负责人&#xff0c;10年以上数据库内核技术开发经验。 *全文4510个字&#xff0c;阅读时长约11分钟。 背景 海量数据OLAP场景&#xff0c;通常具有数据规模大、查询复杂度高、处理速…

9月27日星期三今日早报简报微语报早读

9月27日&#xff0c;星期三&#xff0c;早报简报微语早读分享。 1、兰州&#xff1a;拟明年起奖励医保参保人连续缴费&#xff0c;提高其住院报销比例&#xff1b; 2、中国民办教育协会&#xff1a;10月15日起全面禁止校外培训系误读误解&#xff1b; 3、山西修订未成年人保…

外包干了3个月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;大专生&#xff0c;17年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

根据命令行参数动态导入模块或文件

需求 在命令行运行一个 python 文件&#xff0c;同时传入自定义参数&#xff1a; $ python main.py --nodeTable --actioncreate --data"{name: test2, is_sys_obj: False, encoding: UTF8,datconnlimit: -1, variables: []"希望 main.py 接收命令行参数&#xff0…

Flutter笔记:滚动之-无限滚动与动态加载的实现

Flutter笔记 无限滚动与动态加载的实现 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/133342307 目 录…

Goby 漏洞发布|泛微 E-office flow_xml.php 文件 SORT_ID 参数 SQL 注入漏洞

漏洞名称&#xff1a;泛微 E-office flow_xml.php 文件 SORT_ID 参数 SQL 注入漏洞 English Name&#xff1a; Weaver E-office flow_xml.php file SORT_ID parameter SQL injection vulnerability CVSS core:7.8 影响资产数&#xff1a; 21632 漏洞描述&#xff1a; 泛微…

前端知识总结

在前端开发中&#xff0c;y x是一种常见的自增运算符的使用方式。它表示将变量x的值自增1&#xff0c;并将自增后的值赋给变量y。 具体来说&#xff0c;x是一种后缀自增运算符&#xff0c;表示将变量x的值自增1。而y x则是将自增前的值赋给变量y。这意味着在执行y x之后&am…

linux使用操作[2]

文章目录 版权声明网络传输ping命令wget命令curl命令端口linux端口端口命令和工具 进程管理查看进程关闭进程 主机状态top命令内容详解磁盘信息监控 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明&#xff0c;所有版权属于黑马程序员或相…

设计模式-迭代器模式

介绍 顺序访问一个集合使用者无需知道集合的内部结构&#xff08;封装&#xff09; 示例 常用的jQuery演示 <p>jquery each</p> <p>jquery each</p> <p>jquery each</p><script> var arr [1,2,3] var nodeList document.getEl…

【Unity】LODGroup 计算公式

Unity 在配置 LodGroup 时&#xff0c;其分级切换的计算方法是按照物体在相机视野中占据的比例计算的。在运行时&#xff0c;如果相机视野范围&#xff08;Field of View&#xff09;没有改变&#xff0c;那么这个值可以直接换算成物体距离相机的距离。这里就讨论下如何计算得到…

Jmeter——循环控制器中实现Counter计数器的次数重置

近期在使用Jmeter编写个辅助测试的脚本&#xff0c;用到了多个Loop Controller和Counter。 当时想的思路就是三个可变的数量值&#xff0c;使用循环实现&#xff1b;但第三个可变值的数量次数&#xff0c;是基于第二次循环中得到的结果才能确认最终次数&#xff0c;每次的结果…

华南理工大学电子与信息学院23年预推免复试面试经验贴

运气较好&#xff0c;复试分数90.24&#xff0c;电科学硕分数线84、信通83、专硕电子与信息74. 面试流程&#xff1a; 1&#xff1a;5min ppt的介绍。其中前2min用英语简要介绍基本信息&#xff0c;后3min可用英语也可用中文 介绍具体项目信息如大创、科研、竞赛等&#xff08…

AI指令百科全书:1000条AI指令,一次性全给你!

这是一位&#xff0c;国外博主哈桑 整理的&#xff0c;1000条ChatGPT实用指令&#xff0c;涵盖目前几乎所有的&#xff0c;主流提示需求。 全文超过40000字。 我把它们翻译成更适合大家理解的「中文版Prompt」&#xff0c;并根据具体的内容&#xff0c;拆解成一二级目录&…

Serlet API详解

目录 一、HttpServlet 1.1 处理doGet请求 1.2 处理doPost请求 二、HttpServletRequest 2.1 核心方法 三、HttpServletRespons 3.1 核心方法 一、HttpServlet 在编写Servlet代码的时候&#xff0c;首先第一步要做的就是继承HttpServlet类&#xff0c;并重写其中的某些方法 核心…

基于边缘智能网关的储充一体电站管理方案

在“2030碳达峰&#xff0c;2060碳中和”的目标下&#xff0c;我国持续加快推进能源转型&#xff0c;扩大新能源占比&#xff0c;全国各地都在部署建设光伏、储能、新能源汽车充电等应用。随着新能源汽车的广泛普及&#xff0c;充电站、充电桩的需求快速增加&#xff0c;行业也…

瑞芯微RK3568:Debian系统如何安装Docker

本文基于HD-RK3568-IOT评估板演示Debian系统安装Docker&#xff0c;该方法适用于RK356X全系产品。 HD-RK3568-IOT评估板基于HD-RK3568-CORE 工业级核心板设计&#xff08;双网口、双CAN、5路串口&#xff09;&#xff0c;接口丰富&#xff0c;适用于工业现场应用需求&#xff…

git:一、GIT介绍+安装+全局配置+基础操作

版本管理系统&#xff08;SVN和Git&#xff09;&#xff1a; 集中式版本控制系统&#xff08;SVN&#xff09; SVN是集中式版本控制系统&#xff0c;版本库是集中放在中央服务器的. 工作流程如下: 1.从中央服务器远程仓库下载代码 2.修改后将代码提交到中央服务器远程仓库…

基于VR元宇宙技术搭建林业生态模拟仿真教学系统

随着科技的飞速发展&#xff0c;教学方式也正在经历着巨大的变革。林业经济学元宇宙虚拟教学系统作为一种新兴的教学方式&#xff0c;为学生和教师提供了一个全新的、沉浸式的学习和教学环境。 森林管理和监测 元宇宙技术可以用于森林管理和监测。通过无人机、传感器和虚拟现实…

JavaScript的Web Worker

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ JavaScript的Web Worker⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量…