这是小川的第414次更新,第447篇原创

看题和准备

今天介绍的是LeetCode算法题中Easy级别的第265题(顺位题号是1184)。公交车有n个从0到n-1的车站,形成一个圆圈。我们知道所有相邻车站对之间的距离,其中distance[i]是车站i与车站(i + 1)%n之间的距离。

公交车沿两个方向运行,即顺时针和逆时针。返回给定起点和终点之间的最短距离。

输入:distance = [1,2,3,4], start = 0, destination = 1

输出:1

说明:0与1之间的距离为1或9,最小为1。

输入:distance = [1,2,3,4], start = 0, destination = 2

输出:3

说明:0和2之间的距离为3或7,最小为3。

输入:distance = [1,2,3,4], start = 0, destination = 3

输出:4

说明:0与3之间的距离为6或4,最小为4。

约束

  • 1 <= n <= 10^4
  • distance.length == n
  • 0 <= start, destination < n
  • 0 <= distance[i] <= 10^4

第一种解法

题目的意思是求两个车站之间的距离,而所有车站组合起来形成一个环,因此可以从顺时针方向出发,也可以从逆时针方向出发。我们只需要做两件事情即可,第一是保证出发点的坐标小于终点,第二是比较顺时针出发的距离和逆时针出发的距离大小。

针对第一点,可以做个判断,如果出发点坐标大于终点坐标,就交换两元素的值,保证出发点的坐标值始终小于终点的值。

针对第二点,顺时针方向出发的距离之和很好计算,那么逆时针方向出发的距离和呢?因为整个路径是成环形,逆时针方向出发的距离和,就是用总长减去顺时针方向出发的距离和的差值。

使用两个循环,一个计算总长,一个计算从顺时针方向出发的距离和,比较顺时针出发的距离与总长减去顺时针出发的距离的大小即可。

public int distanceBetweenBusStops(int[] distance, int start, int destination) {
if (start > destination) {
int temp = start;
start = destination;
destination = temp;
}
int sum = 0;
for (int dis : distance) {
sum += dis;
}
int part = 0;
for (int i=start; i<destination; i++) {
part += distance[i];
}
return Math.min(part, sum-part);
}

第二种解法

针对第一种解法,我们可以优化下,只使用一个循环,在循环内部单独做个判断,计算顺时针方向出发的距离和。

public int distanceBetweenBusStops2(int[] distance, int start, int destination) {
if (start > destination) {
int temp = start;
start = destination;
destination = temp;
}
int sum = 0, part = 0;
for (int i=0; i<distance.length; i++) {
if (i >= start && i < destination) {
part += distance[i];
}
sum += distance[i];
}
return Math.min(part, sum-part);
}

小结

算法专题目前已更新LeetCode算法题文章271+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode.1184-公交车站之间的距离(Distance Between Bus Stops)的更多相关文章

  1. 【leetcode】1184. Distance Between Bus Stops

    题目如下: A bus has n stops numbered from 0 to n - 1 that form a circle. We know the distance between al ...

  2. sql server2008根据经纬度计算两点之间的距离

    --通过经纬度计算两点之间的距离 create FUNCTION [dbo].[fnGetDistanceNew] --LatBegin 开始经度 --LngBegin 开始维度 --29.49029 ...

  3. 相似性度量(Similarity Measurement)与“距离”(Distance)

    在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间的“距离”(Distance).采用什么样的方法计算距离是很讲究,甚至关 ...

  4. IOS 计算两个经纬度之间的距离

    IOS 计算两个经纬度之间的距离 一 丶 -(double)distanceBetweenOrderBy:(double) lat1 :(double) lat2 :(double) lng1 :(d ...

  5. 武汉科技大学ACM :1006: 零起点学算法25——求两点之间的距离

    Problem Description 输入平面坐标系中2点的坐标,输出它们之间的距离 Input 输入4个浮点数x1 y1 x2 y2,分别是点(x1,y1) (x2,y2)的坐标(多组数据) Ou ...

  6. 2D和3D空间中计算两点之间的距离

    自己在做游戏的忘记了Unity帮我们提供计算两点之间的距离,在百度搜索了下. 原来有一个公式自己就写了一个方法O(∩_∩)O~,到僵尸到达某一个点之后就向另一个奔跑过去 /// <summary ...

  7. 计算两个latitude-longitude点之间的距离? (Haversine公式)

    问题描述 如何计算纬度和经度指定的两点之间的距离?为了澄清,我想要距离公里;这些点使用WGS84系统,我想了解可用方法的相对准确性.最佳解决方案 这个link可能对您有帮助,因为它详细说明了使用Hav ...

  8. reactjs中使用高德地图计算两个经纬度之间的距离

    第一步下载依赖 npm install --save react-amap 第二步,在组件中使用 import React, { Component } from 'react' import { L ...

  9. 相似性 similarity | Pearson | Spearman | p-value | 相关性 correlation | 距离 distance | distance measure

    这几个概念不能混淆,估计大部分人都没有完全搞懂这几个概念. 看下这个,非常有用:Interpret the key results for Correlation euclidean | maximu ...

随机推荐

  1. SendMessage到底是如何工作的?

    以下内容摘自<<Windows核心编程>>: 概要: SendMessage对于在同一个线程中调用的话,直接调用的是当前线程所属窗口的窗口过程函数(WndProc);如果是跨线 ...

  2. BZOJ 1180 [CROATIAN 2009]OTOCI // BZOJ 2843 极地旅行社 // Luogu P4321 [COCI 2009] OTOCI / 极地旅行社 (LCA板题)

    emmm-标题卡着长度上限- LCT板题-(ε=ε=ε=┏(゜ロ゜;)┛) CODE #include <cctype> #include <cmath> #include & ...

  3. HDOJ 4858 项目管理 ( 只是有点 莫队的分块思想在里面而已啦 )

    题目: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 题意: 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的! ...

  4. jQuery系列(十三):实现轮播

    1.轮播一: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  5. jQuery属性操作之DOM属性操作

    DOM属性操作是对DOM元素的属性进行读取.设置和移除操作, 比如prop(). removeProp(). 1. prop() 1.1 使用prop()获取返回值 prop() 用于返回属性值时, ...

  6. [dos]切换工作目录

    dos切换目录: 最快速的方法: cd /d D:\your\heart 常规步骤: 1. d:  先必须切换盘符 2. cd D:\your\heart,其次切换工作目录

  7. Java基础_类的加载机制和反射

    类的使用分为三个步骤: 类的加载->类的连接->类的初始化 一.类的加载 当程序运行的时候,系统会首先把我们要使用的Java类加载到内存中.这里加载的是编译后的.class文件 每个类加载 ...

  8. django 快速搭建blog(三)

    http://www.cnblogs.com/fnng/p/3737964.html 引用自此博客 创建blog的公共部分 从Django的角度看, 一个页面 具有三个典型的组件: 一个模板(temp ...

  9. Leetcode题目198.打家劫舍(动态规划-简单)

    题目描述: 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给 ...

  10. 解决虚拟机上的tomcat无法被主机访问的问题

    在wmware中安装linux后安装好数据库,JDK及tomcat后启动服务,虚拟机中可以访问,但是主机却无法访问,但是同时主机和虚拟机之间可以ping的通.   网上查阅资料后   第一种解决方法是 ...