首页 > 编程语言 >等级+时间的优先级算法

等级+时间的优先级算法

时间:2024-08-09 18:16:06浏览次数:13  
标签:00 优先级 String TypeEnum 2024 算法 等级 calculatePriority

简介

本算法为等级与时间结合计算对应优先级逻辑

等级越高者优先级越高
同等级下,时间越小者优先级越高

实现

主方法

calculatePriority

import com.zk.blog.enums.TypeEnum;
import org.apache.commons.lang3.StringUtils;

/**
 * @program: 
 * @description:
 * @author: zk
 * @create: 2024-08-09 17:26
 **/
public class PriorityService {

    /**
     * 基线时间
     * 2024-01-01 00:00:00
     * 秒值
     */
    private static final Long baseTime = 1704067200L;

    /**
     * 前缀
     */
    private static final String prefix = "1";

    /**
     * 按照阶梯类型+时间计算优先级
     * 类型级别越高、时间越前者优先级越高
     *
     * @param type 类型 类型优先级最大2位
     * @param time 计算时间
     * @return 优先级结果 :越大优先级越高
     */
    public String calculatePriority(TypeEnum type, Long time) {
        //毫秒转秒
        if (String.valueOf(time).length() == 13) {
            time = time / 1000;
        }
        if (String.valueOf(time).length() != 10) {
            throw new RuntimeException("时间格式错误");
        }
        String typePriority = String.valueOf(type.getLevelPriority());
        String timePriority = String.valueOf(Integer.MAX_VALUE - (time - baseTime));
        typePriority = StringUtils.leftPad(typePriority, 2, "0");
        timePriority = StringUtils.leftPad(timePriority, 12, "0");
        return new StringBuilder().append(prefix).append(typePriority).append(timePriority).toString();
    }
}

采用:Integer.MAX_VALUE - (time - 基线时间)计算出时间优先级
等级优先级为2位,不够则左侧补0
时间优先级为12位,不够则左侧补0
最终优先级::1位前缀+2位级别优先级+12位时间优先级 = 13位字符串

等级类型枚举

TypeEnum


/**
 * @program: 
 * @description: 类型级别
 * @author: zk
 * @create: 2024-08-09 17:30
 **/
public enum TypeEnum {
    /**
     * 级别:描述, 等级优先级
     */
    ONE("一级", 1),
    TWO("二级", 2),
    THREE("三级", 3),
    FOUR("四级", 4),
    FIVE("五级", 5),
    SIX("六级", 6),
    SEVEN("七级", 7),
    EIGHT("八级", 8),
    NINE("九级", 9),
    TEN("十级", 10);

    private String name;

    private Integer levelPriority;

    TypeEnum(String name, Integer levelPriority) {
        this.name = name;
        this.levelPriority = levelPriority;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getLevelPriority() {
        return levelPriority;
    }

    public void setLevelPriority(Integer levelPriority) {
        this.levelPriority = levelPriority;
    }
}

测试

  • 测试代码
    @Test
    public void test(){
        //一级 + 2024-02-01 00:00:00
        System.out.println(calculatePriority(TypeEnum.ONE, 1706745600L));
        //一级 + 2024-03-01 00:00:00
        System.out.println(calculatePriority(TypeEnum.ONE, 1709251200L));
        //九级 + 2024-02-01 00:00:00
        System.out.println(calculatePriority(TypeEnum.NINE, 1706745600L));
        //九级 + 2024-03-01 00:00:00
        System.out.println(calculatePriority(TypeEnum.NINE, 1709251200L));
        //十级 + 2024-02-01 00:00:00
        System.out.println(calculatePriority(TypeEnum.TEN, 1706745600L));
        //十级 + 2024-03-01 00:00:00
        System.out.println(calculatePriority(TypeEnum.TEN, 1709251200L));
    }
  • 测试结果
101002144805247
101002142299647
109002144805247
109002142299647
110002144805247
110002142299647

结束

标签:00,优先级,String,TypeEnum,2024,算法,等级,calculatePriority
From: https://www.cnblogs.com/zktww/p/18351272

相关文章

  • Day24 第七章 回溯算法part03
    目录任务78.子集思路90.子集II思路93.复原IP地址思路心得体会任务78.子集给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。思路和组合问题类似,思路是从序列中每次选一个,选的深度......
  • Day23 第七章 回溯算法part02
    目录任务39.组合总和思路40.组合总和II思路131.分割回文串思路心得体会任务39.组合总和给你一个无重复元素的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的所有不同组合,并以列表形式返回。你可以按任意顺序返回这些......
  • 【Leetcode 169 】 多数元素——投票算法要把我迷倒了
     给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊n/2⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:nums=[3,2,3]输出:3示例 2:输入:nums=[2,2,1,1,1,2,2]输出:2提示:n==nums......
  • 代码随想录算法训练营day08|344.反转字符串,541.反转字符串II,卡码网:54.替换数字
    344.反转字符串题目链接:https://leetcode.cn/problems/reverse-string/description/我的代码:classSolution{public:voidreverseString(vector<char>&s){for(inti=0;i<s.size()/2;i++){chartemp=s[i];s[i]=......
  • 分类算法
    C4.5、SVM、AdaBoost、KNN、朴素贝叶斯、CART引言:分类算法是一种数据挖掘和机器学习中的重要方法,其目的是根据已知的数据特征和类别标签,建立一个模型,从而能够对新的、未见过的数据进行类别预测。分类算法的基本思想是从已有的有标记的数据集(包含特征和对应的类别)中学习到数据的......
  • 前端面试手撕算法大全
    写在前面文末有我在前端面试多年的经验文章,分享给大家!!!防抖//防抖:n秒后在执行该事件,若在n秒内被重复触发,则重新计时//防抖(debounce)函数是指在一定时间内,事件被触发多次,只执行最后一次。这在处理诸如输入框实时搜索等场景时非常有用,避免了频繁触发事件导致性能问题......
  • 室内定位导航技术:蓝牙信号强度(RSSI)与三角定位算法应用
    在数字化时代,位置服务已成为连接物理世界与数字世界的桥梁。在室内环境中,由于GPS信号受建筑物遮挡而失效,传统的室外定位技术难以满足需求,无法精准指引我们在商场、机场、医院等庞大而复杂的建筑内部寻路。室内定位导航技术不仅解决了室内空间定位的盲区问题,更是极大的提升了用......
  • 「代码随想录算法训练营」第三十三天 | 动态规划 part6
    322.零钱兑换题目链接:https://leetcode.cn/problems/coin-change/文章讲解:https://programmercarl.com/0322.零钱兑换.html题目难度:中等视频讲解:https://www.bilibili.com/video/BV14K411R7yv/题目状态:略微有点思路,但还是有点转不过来。思路:这次是找最小的钱币组合,因此......
  • OpenCV 分水岭算法
    使用分水岭算法进行图像分割(一)获取灰度图像,二值化图像,进行形态学操作,消除噪点defwatershed_demo(image):blur=cv.pyrMeanShiftFiltering(image,10,100)gray=cv.cvtColor(blur,cv.COLOR_BGR2GRAY)#获取灰度图像ret,binary=cv.threshold(gray,0,2......
  • 基于paddlehub 未戴口罩检测算法
    一、简介以前大夏天戴着口罩别人觉得你不正常,现在上街不戴口罩你不正常。本文要讲的未戴口罩算法是基于paddlehub提供的模型,paddlehub是百度飞浆(PaddlePaddle)下的深度学习模型开发工具。PaddleHub旨在为开发者提供丰富的、高质量的、直接可用的预训练模,先看实际效果图......