• 【每日一题】1723. 完成所有工作的最短时间


    https://leetcode-cn.com/problems/find-minimum-time-to-finish-all-jobs/

    不会做,蹭个积分就走~

    class Solution {
    	/**
    	 * 最小的  工人最大用时	
    	 */
    	private int minId = Integer.MAX_VALUE;
    	
    	public int minimumTimeRequired(int[] jobs, int k) {
    		backTracking(jobs, new int[k], 0, 0);
    		return minId;
        }
    	/**
    	 * 
    	 * @param jobs 
    	 * @param times 每个工人的用时
    	 * @param m	现在要分配的工作下标
    	 * @param minTime 目前工人的最小用时
    	 */
    	public void backTracking(int[] jobs, int[] times, int m, int minTime) {
    		//如果工作已经分配完了
    		if(m == jobs.length) {
    			minId = Math.min(minId, minTime);
    			return ;
    		}
    		/**
    		 * flag 的作用是  如果一个工人用时为0 那么后面的工人如果也为0,则直接返回
    		 * true为没有工人用时为0  false为有工人用时为0
    		 */
    		boolean flag = true;
    		for(int i = 0; i < times.length; i++) {
    			if(times[i] == 0) {
    				if(!flag) return;
    				flag = false;
    			}
    			times[i] += jobs[m];
    			//如果现在有工人用时已经超过了minId,那么就不用判断了
    			int tmpMax = Math.max(minTime, times[i]);
    			if(tmpMax <= minId) {
    				backTracking(jobs, times, m+1, tmpMax);
    			}
    			times[i] -= jobs[m];
    		}
    	}
    }
    
  • 相关阅读:
    搜索1009
    搜索1004
    Java文件操作
    搜索1007
    连接查询
    SQL学习——数据类型
    SQL学习——基本语法
    <转载>GIS数据下载网站大全
    DOM查询练习
    day09【继承、super、this、抽象类】
  • 原文地址:https://www.cnblogs.com/realzhaijiayu/p/14744448.html
Copyright © 2020-2023  润新知