zoukankan      html  css  js  c++  java
  • LT 183 wood cut

    /*
    Given n pieces of wood with length L[i] (integer array). Cut them into small pieces to guarantee you could have equal or more than k pieces with the same length. What is the longest length you can get from the n pieces of wood? Given L & k, return the maximum length of the small pieces.


    Example

    Example 1


    Input:

    L = [232, 124, 456]

    k = 7

    Output: 114

    Explanation: We can cut it into 7 pieces if any piece is 114cm long, however we can't cut it into 7 pieces if any piece is 115cm long.

    Example 2


    Input:

    L = [1, 2, 3]

    k = 7

    Output: 0

    Explanation: It is obvious we can't make it.*/

    public class Solution {
        /** 
         *@param L: Given n pieces of wood with length L[i]
         *@param k: An integer
         *return: The maximum length of the small pieces.
         */
        public int woodCut(int[] L, int k) {
            // write your code here
            
            if (L == null || L.length == 0 || k <= 0) {
                return 0;
            }
            
            int start = 1;
            int end = 1;
            for (int wood : L) {
                end = Math.max(wood, end);
            }
            
            while (start + 1 < end) {
                int mid = start + (end - start) / 2;
                if (getPieces(L, mid) >= k) {
                    start = mid;
                }
                else {
                    end = mid;
                }
            }
            
            if (getPieces(L, end) >= k) {
                return end;
            }
            if (getPieces(L, start) >= k) {
                return start;
            }
            return 0;
        }
        
        public int getPieces(int[] L, int length) {
            int count = 0;
            for (int wood : L) {
                count += wood / length;
            }
            return count;
        }
    }

    Analysis:
    Binary search for the result. The min length is 1, and the max length is the Max(L[i]). So we can try every possible length and calculate how many pieces can we cut? If the number is greater than k, means the the number we tried might be too small. Otherwise, the number is too large. So we can do it via binary search. The total time complexity would be O(nlogAns)

    http://buttercola.blogspot.com/2019/03/lintcode-183-wood-cut.html

  • 相关阅读:
    Java中两个Long对象如何比较是否相等
    微信小程序data数组push和remove问题
    微信小程序let和var以及const有什么区别
    小程序开发之弹出框
    Windows系统下如何卸载干净mysql
    jQuery序列化表单
    ssm框架使用详解&配置两个数据源
    nginx在一个服务器上配置两个项目,并通过两个不同的域名访问
    nginx跨域设置&文件上传大小限制
    Navicat11连接oracle数据库
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/14898022.html
Copyright © 2011-2022 走看看