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

区间端点(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();
    }

}


http://www.kler.cn/a/600720.html

相关文章:

  • [CLS] Token 在 ViT(Vision Transformer)中的作用与实现
  • vscode ssh连接ubantu显示管道不存在,VMware Virtual Ethernet Adapter for VMnet8不存在
  • Redis原理:multiexec命令
  • C/S与B/S架构
  • ThreadLocal 的用途与用法全解析:Java 多线程开发的利器
  • C++中将记录集的数据复制到Excel工作表中的CRange类CopyFromRecordset函数异常怎么捕获
  • 【c++入门系列】:引用以及内联函数详解
  • javaweb自用笔记:Mybatis
  • Java 线程池全面解析
  • 【Pandas】pandas Series to_csv
  • vue3中watch 函数参数说明
  • 小蓝的括号串(栈,dfs)
  • PHP在2025年的新趋势与应用
  • xilinx约束中set_property -dict表示什么意思
  • Nuxt出现Error: Failed to download template from registry
  • C语言复习笔记--函数递归
  • Hugging Face Spaces 介绍与使用指南
  • 4.milvus索引FLAT
  • 黄土高原风蚀区解析多源数据融合与机器学习增强路径-RWEQ+集成技术在风蚀模数估算中的全流程增强策略—从数据融合到模型耦合的精细化操作指南
  • Linux云计算SRE-第二十一周