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;
    }
};
相关文章
|
7月前
|
索引
leetcode-84:柱状图中最大的矩形
leetcode-84:柱状图中最大的矩形
68 0
|
6月前
|
存储 SQL 算法
LeetCode面试题84:柱状图中最大的矩形
LeetCode面试题84:柱状图中最大的矩形
|
6月前
|
Python
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)-2
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)
|
6月前
|
数据可视化 开发者 Python
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)-1
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)
R语言笔记丨绘图基础知识:饼图、条形图
R语言笔记丨绘图基础知识:饼图、条形图
|
7月前
|
数据可视化 数据挖掘 Python
Matplotlib图表类型详解:折线图、柱状图与散点图
【4月更文挑战第17天】本文介绍了Python数据可视化库Matplotlib的三种主要图表类型:折线图、柱状图和散点图。折线图用于显示数据随时间或连续变量的变化趋势,适合多条曲线对比;柱状图适用于展示分类数据的数值大小和比较;散点图则用于揭示两个变量之间的关系和模式。通过示例代码展示了如何使用Matplotlib创建这些图表。
|
7月前
|
数据可视化 数据处理
灯芯柱状图代码解读
灯芯柱状图代码解读
70 0
|
算法 索引
算法修炼Day60|● 84.柱状图中最大的矩形
算法修炼Day60|● 84.柱状图中最大的矩形
|
Python
Python常用画图代码(折线图、柱状图、饼图)
Python常用画图代码(折线图、柱状图、饼图)
240 0
|
数据可视化 数据处理
R绘图案例|基于分面的折线图绘制
R绘图案例|基于分面的折线图绘制
299 0