本文地址:http://blog.csdn.net/shanglianlm/article/details/72591104
问题:
一条长l的笔直的街道上有n个路灯,若这条街的起点为0,终点为l,第i个路灯坐标为ai,每盏灯可以覆盖到的最远距离为d,为了照明需求,所有灯的灯光必须覆盖整条街,但是为了省电,要是这个d最小,请找到这个最小的d。
输入描述:
每组数据第一行两个整数n和l(n大于0小于等于1000,l小于等于1000000000大于0)。第二行有n个整数(均大于等于0小于等于l),为每盏灯的坐标,多个路灯可以在同一点。
输出描述:
输出答案,保留两位小数。
输入例子:
7 15
15 5 3 7 9 14 0
输出例子:
2.5
java代码:
package com.mingo.common;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class NeteasyStreetlight {
public static DecimalFormat df = new DecimalFormat("#.00");
public static String Streetlight(int mile,ArrayList<Integer> list){
double result = 0;
Set<Integer> setInt = new TreeSet<Integer>();
setInt.addAll(list);
setInt.add(0);
setInt.add(mile);
Iterator<Integer> iterator = setInt.iterator();
int inteval = 0;
int lastVal=iterator.next();
while(iterator.hasNext()){
int temp = iterator.next();
inteval = (temp - lastVal)>inteval?(temp - lastVal):inteval;
lastVal = temp;
}
result = inteval/2;
return df.format(result);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0;i<10;i++){
int randInt = (int) (Math.random() * 10);
list.add(randInt);
}
System.out.println("输入数组为:");
for(Integer li:list){
System.out.print(li+", ");
}
System.out.println();
int mile = 15;
String value = Streetlight(mile,list);
System.out.println("每盏灯可以覆盖到的最远距离d="+value);
}
}