折线图中如果连续的线段共线,那么我们可以可以将其合并成一条线段
首先将坐标点按照横坐标升序排序
然后遍历数组
我们可以通过计算前一个线段的斜率和当前线段的斜率来判断是否共线
如果二者相等,则代表共线,则继续往后查找
如果不相等,则代表不共线,则线段数加一
最终遍历完数组,返回线段数的计数
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