LeetCode讲解篇之2280. 表示一个折线图的最少线段数

文章目录

  • 题目描述
  • 题解思路
  • 题解代码

题目描述

LeetCode讲解篇之2280. 表示一个折线图的最少线段数_第1张图片
LeetCode讲解篇之2280. 表示一个折线图的最少线段数_第2张图片
LeetCode讲解篇之2280. 表示一个折线图的最少线段数_第3张图片

题解思路

折线图中如果连续的线段共线,那么我们可以可以将其合并成一条线段

首先将坐标点按照横坐标升序排序

然后遍历数组

我们可以通过计算前一个线段的斜率和当前线段的斜率来判断是否共线

如果二者相等,则代表共线,则继续往后查找

如果不相等,则代表不共线,则线段数加一

最终遍历完数组,返回线段数的计数

题解代码

class Solution:
    def minimumLines(self, stockPrices: List[List[int]]) -> int:
        stockPrices.sort()
        pre_dy, pre_dx = 1, 0
        n = len(stockPrices)
        ans = 0
        for i in range(1, n):
            dy = stockPrices[i][1] - stockPrices[i-1][1]
            dx = stockPrices[i][0] - stockPrices[i-1][0]
            k = dy / dx
            if dy * pre_dx != dx * pre_dy:
                ans += 1
                pre_dy, pre_dx = dy, dx
        return ans

你可能感兴趣的:(数据结构与算法,leetcode,算法,职场和发展)