leetcode-2280:表示一个折线图的最少线段数

简介: leetcode-2280:表示一个折线图的最少线段数

题目

题目连接

给你一个二维整数数组 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
解释:
如上图所示,折线图可以用一条线段表示。

解题

方法一:判断斜率相等(转化成乘法)

将除法a[0]/b[0]==a[1]/b[1]转化为乘法,就可以避免精度问题,四舍五入。很有可能两个不同的斜率,但是四舍五入成相等了。

这道题其实就是计算这个折线有多少种斜率

(注意转换为乘法会溢出,因此要用uint64_t)

class Solution {
public:
    bool compareVec(vector<int>& a,vector<int>& b){
        return (uint64_t)a[0]*b[1]==(uint64_t)a[1]*b[0];
    }
    int minimumLines(vector<vector<int>>& stockPrices) {
        int n=stockPrices.size();
        vector<int> pre;
        int count=0;
        sort(stockPrices.begin(),stockPrices.end(),[](vector<int>&a,vector<int>&b){
            return a[0]<b[0];
        });
        for(int i=1;i<n;i++){
            vector<int> vec={stockPrices[i][0]-stockPrices[i-1][0],stockPrices[i][1]-stockPrices[i-1][1]};
            if(i==1) count=1;
            else{
                if(compareVec(pre,vec)) continue;
                else count++;
            }
            pre=vec;
        }
        return count;
    }
};
相关文章
|
机器学习/深度学习 JSON 前端开发
RESTful API接口设计规范
近年来移动互联网的发展,前端设备层出不穷(手机、平板、桌面电脑、其他专用设备…),因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信,于是RESTful诞生了,它可以通过一套统一的接口为 Web,iOS和Android提供服务。
3991 1
RESTful API接口设计规范
|
编解码 中间件 API
API实现跨平台互操作性
【10月更文挑战第16天】API实现跨平台互操作性
292 2
|
存储 安全 API
如何进行安全可靠的API身份验证?
如何进行安全可靠的API身份验证?
1755 0
|
11月前
|
负载均衡 监控 网络协议
OSPF中的度量值(Metric)设置:原理与应用
OSPF中的度量值(Metric)设置:原理与应用
1169 2
|
存储 监控 安全
得物 ZooKeeper SLA 也可以 99.99%丨最佳实践
在本文中,作者探讨了ZooKeeper(ZK)的一个内存占用问题,特别是当有大量的Watcher和ZNode时,导致的内存消耗。
44119 113
|
存储 分布式计算 Hadoop
Hadoop节点名称节点(NameNode)
【5月更文挑战第17天】
768 3
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的养老院老人健康监护平台的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的养老院老人健康监护平台的详细设计和实现(源码+lw+部署文档+讲解等)
192 0
|
存储 SQL Cloud Native
一文教会你使用强大的ClickHouse物化视图
在现实世界中,数据不仅需要存储,还需要处理。处理通常在应用程序端完成。但是,有些关键的处理点可以转移到ClickHouse,以提高数据的性能和可管理性。ClickHouse中最强大的工具之一就是物化视图。在这篇文章中,我们将探秘物化视图以及它们如何完成加速查询以及数据转换、过滤和路由等任务。 如果您想了解更多关于物化视图的信息,我们后续会提供一个免费的培训课程。
28745 10
一文教会你使用强大的ClickHouse物化视图
|
机器学习/深度学习 并行计算 算法
掌握XGBoost:GPU 加速与性能优化
掌握XGBoost:GPU 加速与性能优化
2183 0
Spark 通用的性能配置方法:内存和CPU的配置
前言 本文主要介绍关于通过配置Spark任务运行时的内存和CPU(Vcore)来提升Spark性能的方法。通过配置内存和CPU(Vcore)是比较基础、通用的方法。本文出现的Demo以X-Pack Spark数据工作台为背景介绍,数据工作台的详细介绍请参考:数据工作台。
6274 0