离散化、贪心、双指针、二分、倍增、构造、位运算

八、离散化

1、离散化简介

  • 把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。
  • 离散化是一种将数组的值域压缩,从而更加关注元素的大小关系的算法。
  • 当原数组中的数字很大、负数、小数时(大多数情况下是数字很大),难以将“元素值”表示为”数组下标“,一些依靠下标实现的算法和数据结构无法实现时,我们就可以考虑将其离散化。
  • 离散化数组要求内部是有序的(一般是去重的,当然也存在不去重的方法,但是比较少见),其中可以直接通过离散化下标得到值。

 

例题

        输入一个长度为n的数组An,输出第i个数在数组从小到大排序后的排名,数字大小相同时排名一样。(n<=1e5,Ai<.1e9)

输入:5

           5 4 4 2 1                                     4 3 3 2 1

package 无忧.第二章.基础算法;import java.util.*;public class _08离散化 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] arr = new int[n];int[] a = new int[n];Set<Integer> set = new HashSet<>();for (int i = 0; i < n; i++) {arr[i] = sc.nextInt();a[i] = arr[i];}Arrays.sort(a);int k = 0;Map<Integer,Integer> map = new HashMap<>();for (int i = 0; i < n; i++) {set.add(a[i]);map.put(a[i],set.size());}for (int i = 0; i < n; i++) {System.out.print(map.get(arr[i]) + " ");}}
}

九、贪心

1、贪心的概念

  1. 建立数学模型来描述问题
  2. 把求解的问题分成若干子问题
  3. 对每一字问题求解,得到子问题的局部最优解
  4. 把子问题的解局部最优解合成原来解问题的一个解

总结:从局部最优做到全局最优

例题---谈判

https://www.lanqiao.cn/problems/545/learning/

        在很久很久以前,有n个部落居住在平原上,依次编号为1到n。第i个部落的人数为t_{i}。有一年发生了荒灾。年轻的政治家小兰想要说服所有部落一同应对灾害,他能通过谈判来说服部落进行联合。每次谈判,小蓝只能邀请两个部落参加,花费的金币数量为两个部落的人数之和,谈判的效果是两个部落联合成一个部落(人数为原来两个部落的人数之和)

输入描述:输入的第一行包含一个整数n,表示部落的数量。

                  第二行包含n个正整数,依次表示每个部落的人数。

输出描述:输出一个整数,表示最小花费。

示例:4

           9 1 3 5                 31

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);List<Integer> list = new ArrayList<>();int n = sc.nextInt();for (int i = 0; i < n; i++) {int a = sc.nextInt();list.add(a);}Collections.sort(list);long sum = 0;while (list.size()>1){int a = list.get(0);int b = list.get(1);sum += a + b;list.remove(0);list.remove(0);list.add(a+b);Collections.sort(list);}System.out.println(sum);sc.close();}
}

例题---重新排序

        给定一个数组A和一些查询L{_{i}}R_{i},求数组中第L{_{i}}至第R_{i}个元素的之和。小蓝觉得这个问题很无聊,于是他想重新排列一下数组,使得最终每个查询结果的和尽可能地大。小蓝想知道相比原数组,所有查询结果的总和最多可以增加多少?

输入格式:输入第一行包含一个整数n。

                  第二行包含n个整数A_{1},A_{2},...,A_{n},相邻两个整数之间用一个空格分隔。

                  第三行包含一个整数m表示查询的数目。

                  接下来m行,每行包含两个整数L{_{i}}R_{i},相邻两个整数之间用一个空格分隔。

输出格式:输出一行包含一个整数表示答案。

示例:5

           1 2 3 4 5

           2

           1 3

            2 5                                                          4

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.lang.invoke.MethodHandles;
import java.util.Arrays;
import java.util.StringTokenizer;public class Main {public static void main(String[] args) {MyScanner sc = new MyScanner();int n = sc.nextInt();int[] arr = new int[n];for (int i = 0; i < n; i++) {arr[i] = sc.nextInt();}int q = sc.nextInt();int[] d = new int[n];while(q-->0){int l = sc.nextInt()-1;

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

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

相关文章

为什么mac文件拖拽不了 mac文件拖不进硬盘里 macbookpro文件无法拖进移动硬盘 Tuxera NTFS for Mac 2023绿色

如果你是一位Mac用户&#xff0c;你可能会遇到这样的问题&#xff1a;你想把Mac上的文件拖拽到其他位置&#xff0c;比如桌面、文件夹或者外接硬盘&#xff0c;但是却发现无法操作&#xff0c;这是为什么呢&#xff1f;这篇文章将为你解答为什么mac文件拖拽不了&#xff0c;以及…

WebGIS 地铁交通线网数据可视化监控平台

数字孪生技术在地铁线网的管理和运维中的应用是一个前沿且迅速发展的领域。随着物联网、大数据、云计算以及人工智能技术的发展&#xff0c;地铁线网数字孪生在智能交通和智慧城市建设中的作用日益凸显。 图扑软件基于 HTML5 的 2D、3D 图形渲染引擎&#xff0c;结合 GIS 地图&…

EFK(elasticsearch+filebeat+kibana)日志分析平台搭建

本文是记录一下EFK日志平台的搭建过程 项目背景&#xff1a; 此次搭建的日志分析平台主要是采集服务器上的java服务的log日志(输出的日志已经是json格式)&#xff0c;这些日志都已经按照不同环境输出到/home/dev /home/test1 /home/test2 目录下了&#xff0c;按照不同的应…

redis链表结构和简单动态字符串(SDS)

1.双向链表 redis中的普通链表是双向链表。通过链表节点结构体可知有全驱节点和后继节点。 1.链表节点和链表 //adlist.h typedef struct listNode {struct listNode *prev; //前驱节点struct listNode *next; //后继节点void *value; //节点值 } list…

27.ReentrantLock

1.与synchronized不同点&#xff1a; 可中断可以设置超时时间可以设置公平锁&#xff0c;公平锁就是为了解决饥饿线程&#xff0c;让线程排队&#xff0c;先进先出&#xff0c;先来的线程先执行。支持多个条件变量 2.与synchronized相同点都支持锁的可重入。 基本格式&#…

JavaScript 超详细学习思路

JavaScript 是一种轻量级的编程语言&#xff0c;它可以在网页中嵌入&#xff0c;用来实现网页的动态效果和用户交互功能。它是 Web 开发中不可或缺的一部分&#xff0c;与 HTML 和 CSS 并称为 Web 技术的三大基石。下面我会根据您的要求&#xff0c;对每个部分进行详细的讲解。…

“崖山数据库杯”深圳大学程序设计竞赛(正式赛)M题 一图秒

“崖山数据库杯”深圳大学程序设计竞赛&#xff08;正式赛&#xff09;_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com) —————— 可以去牛客看题解&#xff1a; 题解 | #暂时没想法#_牛客博客 (nowcoder.net) —————— 上面的就是题解了。…

Web CSS笔记3

一、边框弧度 使用它你就可以制作盒子边框圆角 border-radius&#xff1a;1个值四个圆角值相同2个值 第一个值为左上角与右下角&#xff0c;第二个值为右上角与左下角3个值第一个值为左上角, 第二个值为右上角和左下角&#xff0c;第三个值为右下角4个值 左上角&#xff0c;右…

大数据时代的生物信息学:挖掘生命数据,揭示生命奥秘

在当今科技日新月异的时代&#xff0c;大数据如同一座蕴藏无尽宝藏的矿山&#xff0c;而生物信息学则是那把锐利的探矿锤&#xff0c;精准有力地敲击着这座“生命之矿”&#xff0c;揭示出隐藏在其深处的生命奥秘。随着基因测序技术的飞速进步与广泛应用&#xff0c;生物医学领…

springboot之MybatisPlus

文章目录 一、ORM二、mybatis实际操作三、mybatis-plus 一、ORM 简单来说ORM就是一个能够帮我们把java中Bean类映射到数据库中。 使用mybatis-plus。 配置架包 <!-- MyBatisPlus依赖 --><dependency><groupId>com.baomidou</groupId><art…

垄断与商品化背景下的网络安全三大整合策略

我国的网络安全产业已经发展了20余年&#xff0c;大大小小的企业几乎覆盖了网络安全的所有领域。随着安全需求的逐渐递增&#xff0c;安全产品也朝着平台化、规模化发展&#xff0c;这就倒逼着安全厂商需要整合越来越多的安全能力&#xff0c;并与其产品相融合。这个过程&#…

安装transforers时报错:error: can‘t find Rust compiler

报错&#xff1a; error: cant find Rust compilerIf you are using an outdated pip version, it is possible a prebuilt wheel is available for this package but pip is not able to install from it. Installing from the wheel would avoid the need for a Rust compil…

【VSCode+Keil5+STM32CubeMX】开发环境配置

一、软件下载 二、软件安装 三、配置环境 四、验证开发环境 五、Keil与VS Code的同步 从0到1搭建VS Code Keil5 STM32CubeMX开发环境 优点 支持标准库HAL库LL库代码编辑更“现代化”&#xff1a;代码提示、函数跳转、更高自由度的定制主题等优点多端同步&#xff0c;VS Code和…

【LAMMPS学习】七、加速性能(3)通用技巧

7. 加速性能 7.1.基准测试 7.2.测试性能 7.3.通用技巧 以下是提高模拟性能的通用技巧。它们中的大多数只适用于当前性能中的某些模型和某些瓶颈&#xff0c;因此让您生成的计时数据作为指导。要预测这些选项会产生多大的差异&#xff0c;即使不是不可能&#xff0c;也是很难…

Pathlib库的有哪些神奇功能在Python中

解锁Python利器pathlib的神奇功能 什么是 pathlib&#xff1f; pathlib 是 Python 中用于处理文件路径的模块&#xff0c;它提供了面向对象的方法来操作文件系统路径。使用 pathlib 可以更加直观和安全地处理文件和目录路径。 功能 一些 pathlib 提供的功能包括&#xff1a;…

Jmeter02-1:参数化组件CVS

目录 1、Jmeter组件&#xff1a;参数化概述 1.1 是什么&#xff1f; 1.2 为什么&#xff1f; 1.3 怎么用&#xff1f; 2、Jmeter组件&#xff1a;参数化实现之CSV Data Set Config(重点中重点) 2.1 是什么&#xff1f; 2.2 为什么&#xff1f; 2.3 怎么用&#xff1f; …

【2024年5月备考新增】《2024高项论文精华版(5)项目工作绩效域和度量绩效域》

3 项目工作绩效域 预期目标绩效指标检查方法①高效且有效的项目绩效状态报告:通过状态报告可以表明项目工作有效率且有效果②适合项目和环境的项目过程▲过程的适宜性:证据表明,项目过程是为满足项目和环境的需要而裁剪▲过程相关性和有效性:过程审计和质量保证活动表明,过…

Golang | Leetcode Golang题解之第5题最长回文子串

题目&#xff1a; 题解&#xff1a; func longestPalindrome(s string) string {if s "" {return ""}start, end : 0, 0for i : 0; i < len(s); i {left1, right1 : expandAroundCenter(s, i, i)left2, right2 : expandAroundCenter(s, i, i 1)if ri…

「PHP系列」PHP数组排序及运用场景

文章目录 一、PHP 数组排序二、PHP 数组排序使用场景数据排序介绍数据排序案例 三、相关链接 一、PHP 数组排序 PHP 提供了多种数组排序函数&#xff0c;允许你根据数组元素的值或键进行排序。 sort() sort() 函数用于对数组的元素按升序进行排序。它会修改原始数组&#xf…

把本地项目上传到gitee上

要把本地项目上传到 Gitee&#xff0c;你需要先在 Gitee 上创建一个仓库&#xff0c;然后在本地使用 Git 将项目推送到 Gitee。以下是简要步骤和示例代码&#xff1a; 1、在 Gitee 上创建一个新的仓库。 2、在本地项目目录中初始化 Git&#xff08;如果尚未初始化&#xff09…