1870. 准时到达的列车最小时速(java)

class Solution {
    public int minSpeedOnTime(int[] dist, double hour) {
        int len = dist.length;
        //乘车时间为len-1小时起步
        if (len - 1 >= hour) {
            return -1;
        }
        int i = 1;
        int j =10000000;
        int index = -1;
        while(i <= j){
            int mid = (i + 1 + j) / 2;
            if(check2(dist,mid,hour)){
                index = mid;
                j = mid - 1;
            }else{
                i = mid + 1;
            }
        }
        return index;
    }

    public boolean check2(int[] dist,int d,double time){
        double sum = 0;
        for(int i = 0;i < dist.length;i++){
            if(i != dist.length - 1){
                sum+=Math.ceil(dist[i] /Double.valueOf(d));
            }else{
                sum+=dist[i] /Double.valueOf(d);
            }
            if(sum > time){
                return false;
            }
        }
        return true;
    }
}

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 根据给定的经纬度及车速,可以使用以下java方法计算从A地点到B地点所需要的时间:public static double calculateTime(double a1, double b1, double a2, double b2, double speed) { double distance = Math.sqrt(Math.pow(a2 - a1, 2) + Math.pow(b2 - b1, 2)); double time = distance / speed; return time; } ### 回答2: 根据给定的经纬度,在球面上计算A地点到B地点的直线距离。首先,根据经度和纬度计算出A地点和B地点的弧度值。 double lat1 = Math.toRadians(a1); double lon1 = Math.toRadians(b1); double lat2 = Math.toRadians(a2); double lon2 = Math.toRadians(b2); 然后使用Haversine公式计算距离。 double dlon = lon2 - lon1; double dlat = lat2 - lat1; double a = Math.pow(Math.sin(dlat / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dlon / 2), 2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); double distance = R * c; 其中,R为地球的半径,取平均值6371公里(注意:单位都是弧度,不是角度)。 最后,根据速度计算时间。 double time = distance / speed; 将以上代码整合到一个Java方法中,代码如下: public double calculateTime(double a1, double b1, double a2, double b2, double speed) { double R = 6371.0; // 地球半径,单位:公里 double lat1 = Math.toRadians(a1); double lon1 = Math.toRadians(b1); double lat2 = Math.toRadians(a2); double lon2 = Math.toRadians(b2); double dlon = lon2 - lon1; double dlat = lat2 - lat1; double a = Math.pow(Math.sin(dlat / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dlon / 2), 2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); double distance = R * c; double time = distance / speed; return time; } 调用该方法可以得到从A地点到B地点需要的时间: double a1 = 40.7128; // A地点的纬度 double b1 = -74.0060; // A地点的经度 double a2 = 34.0522; // B地点的纬度 double b2 = -118.2437; // B地点的经度 double speed = 30; // 车速,单位:公里/小时 double time = calculateTime(a1, b1, a2, b2, speed); 结果中的time即为从A地点到B地点需要的时间,单位为小时。 ### 回答3: 根据给定的经纬度和车辆时速,我们可以使用以下的步骤来计算从A地点到B地点所需的时间: 1. 根据经纬度 a1 和 b1,计算出A地点的位置。 2. 根据经纬度 a2 和 b2,计算出B地点的位置。 3. 使用Haversine公式来计算A地点和B地点之间的球面距离。Haversine公式计算如下: a. 将经纬度转换成弧度制。 b. 使用以下公式计算两个位置之间的球面距离: distance = 2 * r * arcsin(sqrt(sin((b2 - b1) / 2)^2 + cos(b1) * cos(b2) * sin((a2 - a1) / 2)^2)) 其中,r为地球的半径,取平均半径6371公里。 4. 将球面距离转换成时间,根据车辆的时速。时间可以通过以下公式计算: time = distance / speed 其中,distance为球面距离,speed为车辆的时速。 5. 返回计算所得的时间。 以下是基于上述步骤编写的Java方法: ```java public static double calculateTime(double a1, double b1, double a2, double b2, double speed) { double r = 6371.0; // 地球的半径,单位:公里 // 将经纬度转换成弧度制 double radianA1 = Math.toRadians(a1); double radianB1 = Math.toRadians(b1); double radianA2 = Math.toRadians(a2); double radianB2 = Math.toRadians(b2); // 使用Haversine公式计算两个位置之间的球面距离 double distance = 2 * r * Math.asin(Math.sqrt(Math.pow(Math.sin((radianB2 - radianB1) / 2), 2) + Math.cos(radianB1) * Math.cos(radianB2) * Math.pow(Math.sin((radianA2 - radianA1) / 2), 2))); // 将球面距离转换成时间 double time = distance / speed; return time; } ``` 使用该方法,可以传入A地点和B地点的经纬度以及车辆的时速,即可得到从A地点到B地点所需的时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值