Leetcode.2280 表示一个折线图的最少线段数

news2024/11/16 15:32:02

题目链接

Leetcode.2280 表示一个折线图的最少线段数 Rating : 1681

题目描述

给你一个二维整数数组 stockPrices,其中 stockPrices[i] = [dayi, pricei]表示股票在 dayi的价格为 pricei 。折线图 是一个二维平面上的若干个点组成的图,横坐标表示日期,纵坐标表示价格,折线图由相邻的点连接而成。比方说下图是一个例子:

在这里插入图片描述

请你返回要表示一个折线图所需要的 最少线段数

示例 1:

在这里插入图片描述

输入:stockPrices = [[1,7],[2,6],[3,5],[4,4],[5,4],[6,3],[7,2],[8,1]]
输出:3
解释:
上图为输入对应的图,横坐标表示日期,纵坐标表示价格。
以下 3 个线段可以表示折线图:

  • 线段 1 (红色)从 (1,7) 到 (4,4) ,经过 (1,7) ,(2,6) ,(3,5) 和 (4,4) 。
  • 线段 2 (蓝色)从 (4,4) 到 (5,4) 。
  • 线段 3 (绿色)从 (5,4) 到 (8,1) ,经过 (5,4) ,(6,3) ,(7,2) 和 (8,1) 。 可以证明,无法用少于 3 条线段表示这个折线图。

示例 2:

在这里插入图片描述

输入:stockPrices = [[3,4],[1,2],[7,8],[2,3]]
输出:1
解释:
如上图所示,折线图可以用一条线段表示。

提示:

  • 1 < = s t o c k P r i c e s . l e n g t h < = 1 0 5 1 <= stockPrices.length <= 10^5 1<=stockPrices.length<=105
  • s t o c k P r i c e s [ i ] . l e n g t h = = 2 stockPrices[i].length == 2 stockPrices[i].length==2
  • 1 < = d a y i , p r i c e i < = 1 0 9 1 <= dayi, pricei <= 10^9 1<=dayi,pricei<=109
  • 所有 dayi互不相同 。

解法:排序+几何

我们只需要判断给定的坐标连成的线段中有多少个不同的 斜率,就能得出答案。

对于两点 ( x 1 , y 1 ) 和 ( x 2 , y 2 ) (x1,y1) 和 (x2,y2) (x1,y1)(x2,y2) ,他们之间连成的线段的斜率 k = y 2 − y 1 x 2 − x 1 k = \frac{y2-y1}{x2-x1} k=x2x1y2y1

对于三个点 ( x 1 , y 1 ) 和 ( x 2 , y 2 ) 和 ( x 3 , y 3 ) (x1,y1) 和 (x2,y2) 和 (x3,y3) (x1,y1)(x2,y2)(x3,y3),只需要判断前两个点的斜率 和 后两个点的斜率是否相同,就可以判断出它们是否在同一条直线上,即 y 2 − y 1 x 2 − x 1 = y 3 − y 2 x 3 − x 2 \frac{y2-y1}{x2-x1} = \frac{y3-y2}{x3-x2} x2x1y2y1=x3x2y3y2

由于计算机中的除法是有精度问题的。所以我们为了避免这种问题,就将原式的除法 改为 乘法。即 ( x 2 − x 1 ) ( y 3 − y 2 ) = ( y 2 − y 1 ) ( x 3 − x 2 ) (x2-x1)(y3-y2) = (y2-y1)(x3-x2) (x2x1)(y3y2)=(y2y1)(x3x2),我们只需要判断这个是否成立即可。

我们先将 s t o c k P r i c e s stockPrices stockPrices x x x 坐标,从小到大排序,将相邻的点挨到一起,模拟上述的过程即可。

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)

C++代码:

class Solution {
public:
    int minimumLines(vector<vector<int>>& s) {
        int n = s.size();
        //如果只有一个点,那就不存在线段
        if(n == 1) return 0;
        
        //最开始是有一条线段的
        int ans = 1;
        sort(s.begin(),s.end());

        for(int i = 0;i < n - 2;i++){
            int x1 = s[i][0] , y1 = s[i][1];
            int x2 = s[i+1][0] , y2 = s[i+1][1];
            int x3 = s[i+2][0] , y3 = s[i+2][1];

            //*1LL 是为了将乘积转成 long long,防止爆int
            //如果不等于,说明这三点不共线,那么线段数量就要 +1 
            if((x2 - x1) * 1LL *(y3 - y2) != (y2 - y1) * 1LL *(x3 - x2)) ans++;
        }

        return ans;
    }
};


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/420016.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROS学习——艰辛的环境安装之路一Ubuntu

文章目录Ubuntu安装和下载页面设置安装Vmware Tools安装VSCODE用几个常用命令简单熟悉下UbuntuUbuntu 安装和下载 Ubuntu的安装和下载 看这个链接 Ubuntu安装和下载1 或者这个链接 Ubuntu安装和下载2 页面设置 安装Vmware Tools 看这个链接 VMware Tools的介绍和安装 安装…

算法训练第五十五天 | 392.判断子序列、115.不同的子序列

动态规划part15392.判断子序列题目描述思路总结115.不同的子序列题目描述思路392.判断子序列 题目链接&#xff1a;392.判断子序列 参考&#xff1a;https://programmercarl.com/0392.%E5%88%A4%E6%96%AD%E5%AD%90%E5%BA%8F%E5%88%97.html 题目描述 给定字符串 s 和 t &…

RabbitMQ 基础篇 | 黑马

目录 一、RabbitMQ简介 1、AMQP 2、基本概念 3、工作模式 4、JMS 5、小结 二、快速入门 简单模式 生产者 消费者 三、工作模式 1、Work queues 工作队列模式 2、Pub/Sub 订阅模式 3、Routing 路由模式 4、Topics 通配符模式 四、SpringBoot整合RabbitMQ 1、生产…

ESP32设备驱动-BME680环境传感器驱动

BME680环境传感器驱动 文章目录 BME680环境传感器驱动1、BME680介绍2、硬件准备3、软件准备4、驱动实现1、BME680介绍 BME680 是一款集成环境传感器,专为尺寸和低功耗是关键要求的移动应用和可穿戴设备而开发。 BME680 扩展了 Bosch Sensortec 现有的环境传感器系列,首次集成…

电影《龙马精神》观后感

上周看了龙叔的电影《龙马精神》&#xff0c;整体故事围绕着一匹马而展开的&#xff0c;因为这匹马&#xff0c;饰演罗师傅的龙叔&#xff0c;被小混混催债&#xff0c;因为这匹马&#xff0c;罗师傅才有机会和女儿接触&#xff0c;因为这匹马&#xff0c;才有机会看见女婿。 看…

数据结构-排序

本节目标&#xff1a; 1.排序的概念及其运用 2.常见排序算法的实现 3.排序算法复杂度及稳定性分析 1.排序的概念及其应用 1.1排序的概念 排序就是按照某个我们设定的关键字&#xff0c;或者关键词&#xff0c;递增或者递减&#xff0c;完成这样的操作就是排序。 1.2排…

打开组策略提示:无法为文件xxx找到适当的资源文件,错误=2的解决方法

最近把自己的电脑升级成win11了&#xff0c;出现了一些bug&#xff0c;不见得是win11系统的问题&#xff0c;也可能是某个过程出现了问题&#xff0c;出现了问题咱就解决&#xff0c;参考了几个文档和视频&#xff0c;最终解决了&#xff0c;记录一下。 打开本地策略出现问题如…

7.Java中的String类、常用类及包装类

Java中的String类、常用类及包装类 一、String类 1、String类定义 String 类代表字符串。Java 程序中的所有字符串字面值&#xff08;如 “abc” &#xff09;都作为此类的实例实现。字符串是常量&#xff1b;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为…

2023爱分析·中国城市轨交智能运维市场厂商评估报告:逸迅科技

报告编委 张扬 爱分析联合创始人&首席分析师 王鹏 爱分析分析师 目录 1. 研究背景 2. 市场综述 3. 市场分析 4. 厂商评估&#xff1a;逸迅科技 5. 最佳实践案例 1. 研究背景 轨道交通是我国国民经济的命脉和交通运输的骨干网络&#xff0c;不仅承担了绝大…

RocketMQ 消息发送源码解读

可靠同步发送、可靠异步发送、单向发送、批量消息发送。 RocketMQ 消息发送需要考虑以下3个问题。 1&#xff09;消息队列如何进行负载&#xff1f; 2&#xff09;消息发送如何实现高可用&#xff1f; 3&#xff09;批量消息发送如何实现一致性&#xff1f; org.apache.rocketm…

基于SpringBoot+微信小程序的失物招领小程序

基于SpringBoot微信小程序的失物招领小程序 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目…

通达信欧奈尔RPS指标公式编写和设置方法(完全版)

通达信欧奈尔RPS指标公式的编写和设置较为复杂&#xff0c;对于初学者来说可能具有一定挑战性。在编写口袋支点公式时&#xff0c;需要使用RPS指标公式作为基础条件&#xff0c;因此有必要先了解其编写和设置方法。 一、上市一年以上选股 首先选出上市一年以上的股票&#xff…

python实现折线图和条形图

画图的部分函数 pandas 读取数据 相关包&#xff1a;import pandas as pd 函数&#xff1a;dfpd.read_excel(“文件名”) #读取excel文件 df.head(n)#查看前n行 df.tail(n)#查看后n行 df.shape #查看行数和列数 df.columns # 查看列索引 df.index #查看行索引 df.info() #查看…

怎样恢复删除的视频?视频恢复,4个方法!

案例&#xff1a;怎样恢复删除的视频 【谁懂啊&#xff01;电脑里视频太多了太占内存&#xff0c;本想删除一些不太重要的&#xff0c;但却删错了&#xff01;有朋友知道怎样恢复删除的视频吗&#xff1f;】 在数字化时代&#xff0c;我们经常使用电脑来存储和管理各种视频文…

股票量比实时筛选报警

一.什么是股票的量比 量比是短线投资一个参考指标&#xff0c;是衡量相对成交量的一个数值和指标&#xff0c;用于反映股票交易相对于以往的活跃程度&#xff1b;是指在股市开盘以后&#xff0c;平均每一分钟的成交量与过去五个交易日平均每分钟交易量的比。反映股票相对最近5…

自动驾驶定位模块的作用是什么?为什么会有多种坐标系?

无人车,要实现自动驾驶,首先要知道自己的的位置。更准确的说法是:相对某个坐标系,确定车辆的位置和姿态。 这个坐标系可以是局部的: 也可以是全局坐标系: 这是更大维度上的坐标系。 坐标系确定之后,相对坐标原点和坐标轴,车上坐标系(本地坐标系),平移得到位置(x…

SQL语句要点一文速览

以下内容参考《SQL必知必会&#xff08;第4版&#xff09;》 了解 SQL 数据库&#xff08;database&#xff09;&#xff1a;保存有组织的数据的容器&#xff08;通常是一个文件或一组文件&#xff09;。最简单的办法是将数据库想象为一个文件柜。这个文件柜是一个存放数据的…

【数据结构】算法的时间复杂度和空间复杂度(下)(附leetcode练习题)

☃️个人主页&#xff1a;fighting小泽 &#x1f338;作者简介&#xff1a;目前正在学习C语言和数据结构 &#x1f33c;博客专栏&#xff1a;数据结构 &#x1f3f5;️欢迎关注&#xff1a;评论&#x1f44a;&#x1f3fb;点赞&#x1f44d;&#x1f3fb;留言&#x1f4aa;&…

【Linux】system V 共享内存

文章目录system V1. 共享内存原理第一阶段原理第二阶段原理2. 直接写代码--编写代码进行原理介绍shmget函数ftok函数key值用法1. 创建key值2. 创建共享内存 获取共享内存3. 将自己和共享内存关联起来4. 将自己和共享内存取消关联5. 删除共享内存用指令删除调用系统调用完整代码…

数据库管理-第六十六期 SQL Domain(20230413)

数据库管理 2023-04-13第六十六期 SQL Domain1 基本介绍2 Domain的表达式和条件3 语法4 语义5 示例总结第六十六期 SQL Domain 上一期一笔带过了部分Oracle 23c的新特性&#xff0c;这一期重点讲一下SQL Domain新特性。 【https://docs.oracle.com/en/database/oracle/oracle-…