n根绳子截m段
问题
给n根绳子,分别记其长度为L1-Ln。现要从这些绳子中截出等长的m段,求这些绳子长度的最大值,保留两位小数。
比如3根绳子长度 1,2,3,截成3段,则最大值为1.5(1不截,2截一段,3截2段)。
输入:
int[] L:保存n根绳子的长度
int n
int m
思路
由于需要保留两位小数,因此对n根绳子的长度全部乘以100,按照int进行运算,在最后结果时除以100即可。
假设最后结果为0.07,则运算时所求结果为7:
- 翻倍尝试
首先设置分割长度为1:
若1可以的话,再尝试1的2倍,长度为2是否可以。
2可以,4是否可以。
4可以,8是否可以。
8不可以:但是4可以。 - 二分求解
然后求4-8中符合条件的最大值,采用二分法:
继续尝试(8+4)/2=6是否可以。
6可以,继续尝试(6+8)/2=7是否可以。
7可以,8不可以,因此7为所求。
返回7/100=0.07。
代码实现
public class Solution {
public static void main(String[] args) {
int[] L={
1,2,3}