当前位置: 首页 > news >正文

leetcode数论(2280. 表示一个折线图的最少线段数)-几何

前言

经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。现阶段开始专项练习。

数论包含最大公约数(>=2个数)、最大公约数性质、最小公倍数、区间范围质因素计数(最下间隔)、质因素分解、判断质数、平方根、立方根、互质、同余等等。

描述

给你一个二维整数数组 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
解释:
如上图所示,折线图可以用一条线段表示。

提示:

  • 1 <= stockPrices.length <= 105
  • stockPrices[i].length == 2
  • 1 <= dayi, pricei <= 109
  • 所有 dayi 互不相同 。

实现原理与步骤

1.排序后迭代比较斜率

2.斜率比较使用x1*y2!=x2*y1,避免除法的特制处理。

 实现代码(按模分组)

class Solution {public int minimumLines(int[][] stockPrices) {int res=1;int len=stockPrices.length;if(len==1){return 0;}Arrays.sort(stockPrices, (a, b) -> Integer.compare(a[0], b[0]));int[] pre=stockPrices[0];for(int i=1;i<len-1;i++){int[] cur=stockPrices[i];int[] next=stockPrices[i+1];int x1=cur[0]-pre[0];int y1=cur[1]-pre[1];int x2=next[0]-cur[0];int y2=next[1]-cur[1];if(x1*y2!=x2*y1){res++;}pre=cur;}return res;}
}

1.QA:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 开发学习日记1
  • SQL布尔盲注
  • 如何利用 ChatGPT 提高工作效率?
  • 【React】详解 App.js 文件
  • Vue 3+Vite+Eectron从入门到实战系列之一环境安装篇
  • 群晖NAS安装Video Station结合内网穿透实现远程访问本地存储的影音文件
  • Android中的LowMemoryKiller机制
  • TensorFlow和Pytorch是什么?干什么用的?
  • 设计模式 由浅入深(待完结)
  • Java 自定义注解 笔记总结(油管)
  • 【Go】通过反射解析对象tag信息,实现简易ORM
  • llama factory 训练 TensorBoard 可视化
  • 【C++】——Vector的模拟实现
  • Golang | Leetcode Golang题解之第324题摆动排序II
  • mysql如何储存大量数据,分库存分表的建议和看法
  • 345-反转字符串中的元音字母
  • CentOS从零开始部署Nodejs项目
  • C语言笔记(第一章:C语言编程)
  • Docker 笔记(2):Dockerfile
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • HTTP 简介
  • IOS评论框不贴底(ios12新bug)
  • java2019面试题北京
  • JavaScript的使用你知道几种?(上)
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • React的组件模式
  • React-生命周期杂记
  • Sass 快速入门教程
  • Spring-boot 启动时碰到的错误
  • Yeoman_Bower_Grunt
  • 分类模型——Logistics Regression
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 给Prometheus造假数据的方法
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 如何利用MongoDB打造TOP榜小程序
  • 责任链模式的两种实现
  • 《码出高效》学习笔记与书中错误记录
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​flutter 代码混淆
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #100天计划# 2013年9月29日
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (1)无线电失控保护(二)
  • (23)Linux的软硬连接
  • (层次遍历)104. 二叉树的最大深度
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (七)Knockout 创建自定义绑定
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (学习总结16)C++模版2
  • (转)mysql使用Navicat 导出和导入数据库
  • .net 7和core版 SignalR