手撕-版本号排序

news/2025/3/3 13:34:52/文章来源:https://www.cnblogs.com/lushuang55/p/18748030

目录
  • 题目
  • 法一、字符串转数字比较
  • 法二、双指针

题目

  • 输入一组版本号,输出从大到小的排序

  • 示例:
    输入:['2.1.0.1', '0.402.1', '10.2.1', '5.1.2', '1.0.4.5']
    输出: ['10.2.1', '5.1.2', '2.1.0.1', '1.0.4.5', '0.402.1']

法一、字符串转数字比较

function versionSort(arr) {return arr.sort((a, b) => {// 将版本号字符串分割成数字数组'0.402.1'->[0,402,1]const partsA = a.split('.').map(Number);const partsB = b.split('.').map(Number);// 比较每一个部分for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {// 获取当前部分的值,如果超出长度则默认为 0const partA = partsA[i] || 0;//[1,0,5]const partB = partsB[i] || 0;//[1,0]->[1,0,0]// 比较当前部分if (partA !== partB) {return partB - partA; //降序:若partB>partA,则partB-partA为正值,这意味着partB应该排在partA前面;反之排后面}}// 如果所有部分都相等,返回 0return 0;});
}

法二、双指针

var versionSort = function (arr) {// 使用 sort 方法对数组进行排序return arr.sort((a, b) => {const n = a.length, m = b.length; // 获取两个版本号的长度let i = 0, j = 0; // 初始化指针 i 和 j// 遍历两个版本号的每一部分while (i < n || j < m) {let x = 0; // 用于存储版本号 a 的当前部分数值let y = 0; // 用于存储版本号 b 的当前部分数值// 提取版本号 a 的当前部分for (; i < n && a[i] !== '.'; i++) {x = x * 10 + (+a[i]); // 累加数字}i++; // 跳过 '.'// 提取版本号 b 的当前部分for (; j < m && b[j] !== '.'; j++) {y = y * 10 + (+b[j]); // 累加数字}j++; // 跳过 '.'// 比较当前部分的值if (x !== y) {return y - x; // 若y>x,则y-x为正值,这意味着 y应该排在x前面;若y<x,则y-x为负值,这意味着x应该排在y前面}}return 0; // 如果所有部分都相等,返回 0});
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/892920.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

驾驶员监控系统DMS

目前,随着整车智能化的深入发展、L2及L2+的高级辅助驾驶功能加速上车,L3级别的自动驾驶也在快速落地中。与此同时,交通事故的频发也引发着行业的重视。这一情况通常与人类不良驾驶行为息息相关:疲劳驾驶、分心驾驶、危险驾驶等交通安全“隐形杀手”长期威胁驾驶员与乘客的生…

【CDN理论基础】http的正向代理与反向代理及http缓存原理

一、HTTP代理协议 HTTP代理的工作原理是在客户端和web服务器之间拦截和转发HTTP请求和响应。换句话说,当您尝试使用HTTP代理访问某个网站或服务时,您并没有直接与web服务器通信,而是由代理帮你去跟web服务器交互,将你的请求转发给web服务器,再将web服务器返回的内容再转发…

[译] DeepSeek开源smallpond开启DuckDB分布式之旅

DeepSeek 正通过 smallpond(一种新的、简单的分布式计算方法)推动 DuckDB 超越其单节点的局限。然而,我们也需要探讨,解决了横向扩展的挑战后,会不会是带来新的权衡问题呢?译者序:DuckDB 是一款基于 PostgreSQL 语法生态的分析型嵌入式数据库,是近年来数据库圈的新秀,…

2025 联合省选流水账(公开版)

Remain loving. Keep dreaming.2025 联合省选流水账(公开版) 前言 写流水账是为了知道我每天干了什么。 2.3 春节假期结束,该上课了。 如果没有进队,就去学文化课,如果进了队,就晚一点去学文化课。 人,别摆了。 2.4 下午在水 B 站,晚上去看花灯了。 2.5 晚上收拾行李。…

3.4K star!全能PDF处理神器开源!文档转换/OCR识别一键搞定

PDF-Guru 是一款开箱即用的全能型PDF处理工具,支持跨平台文档转换、智能OCR识别、多格式解析等核心功能。项目采用模块化架构设计,提供简洁的Web界面和API接口,开发者可快速集成到现有系统中。嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工…

ICP备案注销

ICP备案注销教程服务器供应商:腾讯云

通过fetch_mcp,让Cline能够获取网页内容。

fetch_mcp介绍 GitHub地址:https://github.com/zcaceres/fetch-mcp此MCP服务器提供了以多种格式(包括HTML、JSON、纯文本和Markdown)获取网络内容的功能。 效果 以这个新闻页面为例:获取页面的Html效果:获取页面文本效果:获取md格式内容并保存到test.md效果:是不是很有帮…

index.aspx ,add的重复集合项

原因:地址错误,缺少index.aspx 正确地址:127.0.0.1/K3Cloud/mobile/index.aspx

【日记】周末基本都在睡觉呢(1215 字)

正文这个周末几乎什么都没做。昨天看了一点点内科学,不过主要还是在涩涩(笑)。目前进度停留在肺结核。肺结核之前过年的时候看过一点点,主要还是做笔记。如果不看,可能我一生都不知道七八成的人都有肺结核。我听到唐子益说这个结论的时候极其诧异。结核杆菌耐酸耐碱耐冷耐…

AI加速,颠覆创新 |《2月中国数据库行业分析报告》已发布,本月聚焦 LLM x 数据库

DeepSeek、OpenAI背后是什么数据库?向量数据库能为LLM带来哪些增强?国产数据库又能与LLM碰撞出哪些火花?欢迎阅读本期墨天轮中国数据库行业分析报告一起寻找答案!为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天…

HTB 取证分析 Logger WP

早上没课没事干,写点不那么耗时间的题目如上,需要分析流量数据,下载完pcap包拖入wireshark,打开查看一下 都是USB的流量,分析一下数据,大概能够知道: 数据包长度为35 传输方式为中断传输 且需要寻找存在按键输入的流量 那么就可以在wireshark内筛选一下数据了,可以过滤…

更像的五星红旗

点击查看代码 import turtle# 设置屏幕 screen = turtle.Screen() screen.bgcolor("white") screen.setup(width=800, height=600) # 设置窗口大小# 设置画笔 pen = turtle.Turtle() pen.speed(10) pen.penup()# 绘制红旗背景 def draw_rectangle(color, width, hei…