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

区间端点(java)(贪心问题————区间问题)

deepseek给了一种超级简单的做法

我是真的想不到

贪心的思路是 局部最优——>全局最优

这种我是真的没有想到,这样的好处就是后面便利的时候可以通过foreach循环直接便利qu的子元素也就是对应的某一个区间,

将一个二维数组变成一维数组,每一个一维数组直接存储区间左右端点

取的时候很方便

   int qu[][] = new int[n][2];
        for (int i = 0; i <n ; i++) {
            qu[i][0] =in.nextInt();
            qu[i][1] = in.nextInt();

        }

选取每一个区间的右端点 ,可以让一个端点尽可能多的出现在其他区间

先给区间排序,按照右端点从小到大给区间进行排序

lamada表达式:

按照右端点的升序排序

//        按照区间右端点从小到大排序区间左右端点
        Arrays.sort(qu,(a,b)->{
            return a[1]-b[1];
        });

设置一个记录出现在多个区间的端点的变量

因为题目中出现了数据范围最小是10的-9次方

  • Integer.MIN_VALUE 是 java.lang 包的 Integer 类中的一个常量,指定存储 Java 中任何整数变量的最小可能值。
  • 实际值是:
-2^31 = -2147483648

 分别用来记录点的个数

和点的大小

   int count  = 0;
        int min =Integer.MIN_VALUE;

每次先取最小的右端点,然后直到后面的某一个区间的左端点比这个点大

就取这个无法覆盖的区间的右端点作为新的点

直到最后

然后每次进行判断

//        直接获取某个区间存储的两个值l和r
        for(int [] q:qu){
//       判断每一个区间的左端点  当前这个点要大
            if(q[0]>min){
//               赋值给右端点
                min = q[1];
                count++;
            }

        }

完整代码

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

/**
 * @author zb
 * date2025/3/25 21:24
 */
public class Main {

    public static void main(String[] args) {
        Scanner in =new Scanner(System.in);
        int n = in.nextInt();

        int qu[][] = new int[n][2];
        for (int i = 0; i <n ; i++) {
            qu[i][0] =in.nextInt();
            qu[i][1] = in.nextInt();

        }
        Arrays.sort(qu,(a,b)->{
            return a[1]-b[1];
        });
        int count  = 0;
        int min = Integer.MIN_VALUE;
        for(int [] q:qu){
//       判断每一个区间的左端点  当前这个点要大
            if(q[0]>min){
//               赋值给右端点
                min = q[1];
                count++;
            }

        }
        System.out.println(count);




        in.close();
    }

}

相关文章:

  • 游戏中的碰撞检测算法
  • 吐血整理:Air8201如何使用LuatOS进行电源管理功能!
  • 线程控制与线程库
  • ideaIU-2023.2.5.exe install (IntelliJ_IDEA_IU_2023.2.5)
  • 解决海豚调度器跑出数据但显示状态失败(在CDH6.3.2跑离线数仓任务)
  • C#中获取字节数据的高字节和低字节
  • MyBatis-Plus LambdaQueryWrapper 详解:优雅构建类型安全的查询条件
  • 3.25学习总结 抽象类和抽象方法+接口+内部类+API
  • 常用的离散时间傅里叶变换(DTFT)对
  • 网络相关的知识总结1
  • 【Tauri2】002——Cargo.toml和入口文件
  • 【C++】智能指针
  • 计算机组成原理———I\O系统精讲<1>
  • 【redis】哨兵:docker搭建redis环境,容器的编排方式
  • 3D-ViTac:通过视觉-触觉感知学习精细操作
  • 反射机制概述和代码举例
  • 数据库索引相关的面试题以及答案
  • python裁剪nc文件数据
  • Codeforces Round 1011 (Div. 2)
  • shopify跨境电商行业前景与规模
  • wordpress 隐藏分类目录/网上seo研究
  • 广告网站建设网站排名优化/推广业务
  • 公司网站费用/附近的成人电脑培训班
  • 电商网站设计欣赏/爱站网关键词查询网站的工具
  • 门户网站开发需要多少钱/微博今日热搜榜
  • 33岁改行做网站建设/100个电商平台