【算法刷题】—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;
  }
}


✨总结


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


相关文章
|
6月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
|
2月前
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
119 0
|
2月前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
21 0
|
2月前
|
算法 C++
【算法解题思想】动态规划+深度优先搜索(C/C++)
【算法解题思想】动态规划+深度优先搜索(C/C++)
|
4月前
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
|
4月前
|
算法 Python
【Leetcode刷题Python】改进的算法,高效求一个数的因子
一个高效的Python函数用于找出一个整数的所有因子,通过仅遍历到该数平方根的范围来优化性能。
47 0
|
6月前
|
算法
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
|
6月前
|
算法
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
|
6月前
|
算法
【数据结构与算法 刷题系列】移除链表元素
【数据结构与算法 刷题系列】移除链表元素
|
6月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】环形链表的约瑟夫问题
【数据结构与算法 刷题系列】环形链表的约瑟夫问题