一个时间段内保险额度的最大值?

一名用户在不定时地在保险机构购买保险,每次投保会产生保险额度 amnt、生效日 valdate、终止日 enddate,保险额度只在生效日和终止日之间有效([startdate, endate],包含边界值),多次投保时日期可重叠,现要求一个时间段 [t1, t2] 内生效保险额度的最大值。
amntList = [[amnt1, startdate1, enddate1], [amnt2, startdate2, enddate2], [amnt3, startdate3, enddate3], ... , [amntN, startdateN, enddateN]]

例:

保险额度生效日终止日
302023/1/12023/6/1
502023/5/82023/10/8
902023/12/102023/4/10
302023/7/12023/8/1
402023/7/152023/12/15

时间范围为[2023/4/4, 2024/4/4],在这个时间段内该用户的最大有效保险金额为130。
提供思路或代码均可,我实在想不出思路,总不能遍历每一天然后看哪天的金额最多吧,谢谢

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7612123
  • 除此之外, 这篇博客: 有三个线程,线程一只打印t1,线程二只打印t2,线程三只打印t3,输出到三个文件,第一个文件的打印顺序是t1 t2 t3 ...第二个是t2 t3 t1... 第三个是t3 t1 t2中的 有三个线程,线程一只打印t1,线程二只打印t2,线程三只打印t3,在控制台上输出t1 t2 t3 。。循环5遍之后输出t2 t3 t1。。5遍 再输出t3 t1 t2。。5遍之后就循环这3中操作 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    /**
     * 有三个线程,线程一只打印t1,线程二只打印t2,线程三只打印t3,在控制台上输出t1 t2 t3 。。循环5遍
     * 之后输出t2 t3 t1。。5遍 再输出t3 t1 t2。。5遍之后就循环
     * @author Administrator
     * 解题思路: 线程T1T2T3, 顺序执行5遍之后,改变线程执行顺序为T2T3T1执行5遍,再改变顺序执行T3T1T2线程执行5遍,然后在回到原来的顺序,如此循环
     */
    public class test2 {
    	
    	static int count = 0;
    	static Object lock = new Object();
    	
    	//初始线程顺序位标识
    	static int a = 0;
    	static int b = 1;
    	static int c = 2;
    	
    	public static void main(String[] args) {
    		new Thread(()->{
    			synchronized (lock) {
    				while(true){
    					try {
    						if(count%3 == a) {
    							System.out.print("t1");
    							count++;
    							if(count%15 == 0) { //改变线程执行顺序
    								a = (a+2)%3;//1
    								b = (b+2)%3;//2
    								c = (c+2)%3;//0
    								System.out.println(",输出5次t2t3t1完毕,改变线程执行顺序位a="+a+",b="+b+",c="+c);
    								Thread.sleep(500L);
    							}
    							lock.notifyAll();
    						}else {
    							lock.wait();
    						}
    					}catch(Exception e) {
    						e.printStackTrace();
    					}
    					
    				}
    			}
    		}).start();
    		
    		
    		new Thread(()->{
    			synchronized (lock) {
    				while(true){
    					try {
    						if(count%3 == b) {
    							System.out.print("t2");
    							count++;
    							if(count%15 == 0) { //改变线程执行顺序
    								a = (a+2)%3;//0
    								b = (b+2)%3;//1
    								c = (c+2)%3;//2
    								System.out.println(",输出5次t3t1t2完毕,改变线程执行顺序位a="+a+",b="+b+",c="+c);
    								Thread.sleep(500L);
    							}
    							lock.notifyAll();
    						}else {
    								lock.wait();
    						}
    					} catch (Exception e) {
    						e.printStackTrace();
    					}
    				}
    			}
    		}).start();
    		
    		new Thread(()->{
    			synchronized (lock) {
    				while(true){
    					try {
    						if(count%3 == c) {
    							System.out.print("t3");
    							count++;
    							if(count%15 == 0) { //改变线程执行顺序
    								a = (a+2)%3;//2
    								b = (b+2)%3;//0
    								c = (c+2)%3;//1
    								System.out.println(",输出5次t1t2t3完毕,改变线程执行顺序位a="+a+",b="+b+",c="+c);
    								Thread.sleep(500L);
    							}
    							lock.notifyAll();
    						}else {
    								lock.wait();
    						}
    					} catch (InterruptedException e) {
    						e.printStackTrace();
    					}
    				}
    			}
    		}).start();
    		
    	}
    }
    

    打印结果:
    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^