JavaScript算法29- 表示一个折线图的最少线段数(leetCode:6076)周赛

本文主要是介绍JavaScript算法29- 表示一个折线图的最少线段数(leetCode:6076)周赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

一、题目

给你一个二维整数数组 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 互不相同 。

二、题解

初看这题很简单,一顿操作猛如虎
(提示:这是错误示范,可略过)

/*** @param {number[][]} stockPrices* @return {number}*/
var minimumLines = function(stockPrices) {if(stockPrices.length === 1) return 0// 按照日期升序排序stockPrices.sort((a, b) => a[0] - b[0]);let linesNumber = 0// 初始化斜率let ratiofor (let i = 1; i < stockPrices.length; i++){// 当前两点间的直线斜率let currRatio = (stockPrices[i][1] - stockPrices[i - 1][1]) / (stockPrices[i][0] - stockPrices[i - 1][0])// 若当前两点间的斜率和之前的斜率不相等,则认为产生新线段if (ratio !== currRatio) {linesNumber++ratio = currRatio}}return linesNumber
};

阻塞在最后3个示例(精度丢失问题)
在这里插入图片描述
在这里插入图片描述
解题思路我们已经有了(判断当前两点的直线斜率和之前的直线斜率是否相等),现在的难点在于怎样防止精度丢失
解决方法:

  1. 除法变乘法 (a / b === c / d 变为 a * d === b * c
  2. 套个 BigInt,处理乘积超出 Number最大范围的问题。
/*** @param {number[][]} stockPrices* @return {number}*/
var minimumLines = function (stockPrices) {  if(stockPrices.length === 1) return 0if(stockPrices.length === 2) return 1// 按照日期升序排序stockPrices.sort((a, b) => a[0] - b[0]);let linesNumber = 1let SUB1 = stockPrices[1][1] - stockPrices[0][1]let SUB2 = stockPrices[1][0] - stockPrices[0][0]for (let i = 2; i < stockPrices.length; i++){let sub1 = (stockPrices[i][1] - stockPrices[i - 1][1])let sub2 =  (stockPrices[i][0] - stockPrices[i - 1][0])if (BigInt(SUB2)*BigInt(sub1) !== BigInt(SUB1)*BigInt(sub2)) {linesNumber++}SUB1 = sub1SUB2 = sub2}return linesNumber
};

在这里插入图片描述

三、拓展:BigInt

MDN-BigInt详解
1、介绍
BigInt 是一种内置对象,它提供了一种方法来表示大于 253 - 1 的整数。这原本是 Javascript中可以用 Number 表示的最大数字BigInt 可以表示任意大的整数。

2、用法
可以用在一个整数字面量后面加 n 的方式定义一个 BigInt ,如:10n,或者调用函数 BigInt()(但不包含 new 运算符)并传递一个整数值或字符串值。

const theBiggestInt = 9007199254740991n;const alsoHuge = BigInt(9007199254740991);
// ↪ 9007199254740991nconst hugeString = BigInt("9007199254740991");
// ↪ 9007199254740991nconst hugeHex = BigInt("0x1fffffffffffff");
// ↪ 9007199254740991nconst hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111");
// ↪ 9007199254740991n

这篇关于JavaScript算法29- 表示一个折线图的最少线段数(leetCode:6076)周赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/236905

相关文章

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

HTML input 标签示例详解

《HTMLinput标签示例详解》input标签主要用于接收用户的输入,随type属性值的不同,变换其具体功能,本文通过实例图文并茂的形式给大家介绍HTMLinput标签,感兴趣的朋友一... 目录通用属性输入框单行文本输入框 text密码输入框 password数字输入框 number电子邮件输入编程框

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

HTML5 中的<button>标签用法和特征

《HTML5中的<button>标签用法和特征》在HTML5中,button标签用于定义一个可点击的按钮,它是创建交互式网页的重要元素之一,本文将深入解析HTML5中的button标签,详细介绍其属... 目录引言<button> 标签的基本用法<button> 标签的属性typevaluedisabled

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.