【算法刷题】—7.26几何算法的解题,折线图线段数

简介: ✨今日算法一题表示一个折线图的最少线段数

✨今日算法一题


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


文章目录


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


题目描述

思路详解


这里我们考虑到,什么时候线段需要加一段,如果两段的斜率变化了,则就要加一段了。

相邻的点如果斜率不一致,需要新加一段

通过相邻点的横纵坐标差,判断斜率,方式有二:


  • y1/x1 != y2/x2, 由于除法涉及 double 精度 比较麻烦
  • 移项后判断 y1 * x2 != y2 * x1 , 方便很多

     一个点, 线段数为0

代码与结果

class Solution {
  public int minimumLines(int[][] stockPrices) {
    Arrays.sort(stockPrices, (o1, o2) -> o1[0] - o2[0]);
    int n = stockPrices.length, res = 1;
    if (n == 1) return 0;
    for (int i = 2; i < n; i++) {
      int x1 = stockPrices[i][0] - stockPrices[i - 1][0], y1 = stockPrices[i][1] - stockPrices[i - 1][1];
      int x2 = stockPrices[i - 1][0] - stockPrices[i - 2][0], y2 = stockPrices[i - 1][1] - stockPrices[i - 2][1];
      if (y1 * x2 != y2 * x1) res++;
    }
    return res;
  }
}


✨总结


本题考察了数学思想,判断斜率进而判断线段的数量。


相关文章
|
3月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
|
1月前
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
|
1月前
|
算法 Python
【Leetcode刷题Python】改进的算法,高效求一个数的因子
一个高效的Python函数用于找出一个整数的所有因子,通过仅遍历到该数平方根的范围来优化性能。
30 0
|
3月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
3月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
3月前
|
算法
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
|
3月前
|
算法
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
|
3月前
|
算法
【数据结构与算法 刷题系列】移除链表元素
【数据结构与算法 刷题系列】移除链表元素
|
3月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】环形链表的约瑟夫问题
【数据结构与算法 刷题系列】环形链表的约瑟夫问题
|
3月前
|
算法 C语言
【数据结构与算法 刷题系列】求链表的中间结点
【数据结构与算法 刷题系列】求链表的中间结点