【算法】根据输入的整数数组,以范围格式返回格式正确的字符串。

算法,根据,输入,整数,数组,范围,格式,返回,正确,字符串 · 浏览次数 : 7

小编点评

```csharp public class RangeExtraction { public static string Extract(int[] nums) { StringBuilder result = new StringBuilder(); int start = nums[0]; int end = nums[0]; bool rangeInProgress = false; for (int i = 1; i < nums.Length; i++) // 遍历数组,从第二个元素开始 { if (nums[i] == end + 1) // 如果当前元素与结束值相差1,说明可以构建范围 { end = nums[i]; rangeInProgress = true; } else if (rangeInProgress && (end - start >= 2)) // 如果之前正在构建范围,并且范围至少包含3个数 { result.Append(start + "-\" + end + ",\"); } else if (rangeInProgress) // 如果之前正在构建范围,但范围不包含至少3个数 { result.Append(start + ",\" + end + ",\"); } else { result.Append(start + ","); } start = nums[i]; end = nums[i]; } if (rangeInProgress && (end - start >= 2)) { result.Append(start + "-\" + end); } else if (rangeInProgress) { result.Append(start + ",\" + end); } else { result.Append(start); } return result.ToString(); } } ```

正文

输入是一种整数有序数组的格式,使用逗号分隔

单个整数或由起始整数表示的整数范围,起始整数与结束整数之间用短划线“-”分隔。范围包括数值区间中的所有整数,包括两个端点。除非它至少跨越3个数字,否则它不被视为一个范围。例如“12,13,15-17”表示数值范围。

完成解决方案,使输入数组按递增顺序获取整数列表,并以范围格式返回格式正确的字符串。

示例:

调用:solution([-10, -9, -8, -6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20]);
返回: "-10--8,-6,-3-1,3-5,7-11,14,15,17-20"


算法实现:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 
 5 public class RangeExtraction
 6 {
 7    public static string Extract(int[] nums)
 8     {
 9         StringBuilder result = new StringBuilder();
10         int start = nums[0];
11         int end = nums[0];
12         bool rangeInProgress = false;
13 
14         for (int i = 1; i < nums.Length; i++) // 遍历数组,从第二个元素开始
15     {
16         if (nums[i] == end + 1) // 如果当前元素与结束值相差1,说明可以构建范围
17         {
18             end = nums[i]; // 更新结束值为当前元素
19             rangeInProgress = true; // 标记正在构建范围
20         }
21         else // 如果当前元素与结束值不相差1,说明无法构建范围
22         {
23             if (rangeInProgress && (end - start >= 2)) // 如果之前正在构建范围,并且范围至少包含3个数
24                 result.Append(start + "-" + end + ","); // 将范围以"起始值-结束值"的形式添加到结果中
25             else if (rangeInProgress) // 如果之前正在构建范围,但范围不包含至少3个数
26                 result.Append(start + "," + end + ","); // 将起始值和结束值分别添加到结果中
27             else // 如果之前没有构建范围
28                 result.Append(start + ","); // 将起始值添加到结果中
29 
30             start = nums[i]; // 更新起始值为当前元素
31             end = nums[i]; // 更新结束值为当前元素
32             rangeInProgress = false; // 标记停止构建范围
33         }
34     }
35 
36     if (rangeInProgress && (end - start >= 2)) // 如果最后一个范围正在构建,并且范围至少包含3个数
37         result.Append(start + "-" + end); // 将最后一个范围以"起始值-结束值"的形式添加到结果中
38     else if (rangeInProgress) // 如果最后一个范围正在构建,但范围不包含至少3个数
39         result.Append(start + "," + end); // 将最后一个范围的起始值和结束值分别添加到结果中
40     else // 如果最后一个范围没有构建
41         result.Append(start); // 将最后一个范围的起始值添加到结果中
42 
43     return result.ToString(); // 将结果转换为字符串并返回
44     }
45 }

测试用例:

 1 using NUnit.Framework;
 2 
 3 [TestFixture]
 4 public class RangeExtractionTests
 5 {
 6     [Test] public void Test1() 
 7    { 
 8     int[] nums = { 1, 2, 3, 5, 6, 7, 9 }; 
 9     string expected = "1-3,5-7,9"; 
10     string result = RangeExtraction.Extract(nums);
11     Assert.AreEqual(expected, result); 
12    }
13 
14     [Test]
15     public void Test2()
16     {
17         int[] nums = { 1, 3, 4 };
18         string expected = "1,3,4";
19         string result = RangeExtraction.Extract(nums);
20         Assert.AreEqual(expected, result);
21     }
22 
23     [Test]
24     public void Test3()
25     {
26         int[] nums = { 1, 2, 3, 4, 5 };
27         string expected = "1-5";
28         string result = RangeExtraction.Extract(nums);
29         Assert.AreEqual(expected, result);
30     }
31 
32     [Test]
33     public void Test4()
34     {
35         int[] nums = { 1, 2, 4, 5, 6 };
36         string expected = "1,2,4-6";
37         string result = RangeExtraction.Extract(nums);
38         Assert.AreEqual(expected, result);
39     }
40 
41     [Test]
42     public void Test5()
43     {
44         int[] nums = { -3, -2, 0, 1, 2, 3, 101, 102, 103 };
45         string expected = "-3,-2,0-3,101-103";
46         string result = RangeExtraction.Extract(nums);
47         Assert.AreEqual(expected, result);
48     }
49 }

 

与【算法】根据输入的整数数组,以范围格式返回格式正确的字符串。相似的内容:

【算法】根据输入的整数数组,以范围格式返回格式正确的字符串。

输入是一种整数有序数组的格式,使用逗号分隔 单个整数或由起始整数表示的整数范围,起始整数与结束整数之间用短划线“-”分隔。范围包括数值区间中的所有整数,包括两个端点。除非它至少跨越3个数字,否则它不被视为一个范围。例如“12,13,15-17”表示数值范围。 完成解决方案,使输入数组按递增顺序获取整

【算法】根据输入的正整数,重新排列生成一个更大的数字

需求:创建一个函数,该函数取一个正整数,并返回下一个较大的数字,该数字可以通过重新排列其数字来形成。例如: 12 >21 513==>531 2017 >2071 如果数字不能重新排列以形成更大的数字,则返回-1: 9 >-1 111=>-1 531=>-1

【算法】根据整数数组,生成正的素因子二维数组,并排序

给定一个正整数或负整数的数组,I=[i1,..,in] 生成一个形式为的排序数组P [[p,I数组的所有ij的和,其中p是ij的素因子(p为正)]…] P将按素数的递增顺序进行排序。 示例: I={12,15};//结果=“(2 12)(3 27)(5 15)” [2,3,5]是I的元素的所有素因子

【算法】根据二叉树的级别返回排序后的元素列表

根据给定的Node树节点,返回包含按级别排序的树中元素的列表,这意味着根元素位于第一位,然后根子元素(从左到右)位于第二位和第三位,依此类推。 1 public class Node 2 { 3 public Node Left; 4 public Node Right; 5 public int

【算法】数学之旅,根据素数特征寻找底数

当下午六点的钟声敲响,小悦如常地结束了一天的工作。她坐在工位上,脑海中不禁回想起自己学习数学的过程。那些数字、公式以及那些漫长夜晚的努力,都像是一段迷人的旋律,让她无法忘怀。当她沉浸在回忆中时,那迷人的微笑映入了旁人的眼帘,而这一幕恰好被一位同事捕捉到。 “你在笑什么呢?”同事好奇地问道。 “哦,没

[转帖]nginx的ip_hash算法

概念 根据用户请求的ip,利用算法映射成hash值,分配到特定的tomcat服务器中。主要是为了实现负载均衡,只要用户ip固定,则hash值固定,特定用户只能访问特定服务器,解决了session的问题。 源码分析 ip_hash算法的处理代码位于src\http\modules\ngx_http_u

弹性伸缩:高可用架构利器(架构+算法+思维)

1 介绍 云计算资源弹性伸缩是一种根据业务需求动态调整计算资源规模的技术。它可以根据系统的性能指标(如CPU使用率、内存占用率、磁盘IO、网卡读写率、请求响应时间等)或者预定义的规则(如时间周期、业务事件等),自动增加或减少计算资源的数量,以满足业务负载的变化。这种技术可以确保系统在高峰时期拥有足够

物以类聚人以群分,通过GensimLda文本聚类构建人工智能个性化推荐系统(Python3.10)

众所周知,个性化推荐系统能够根据用户的兴趣、偏好等信息向用户推荐相关内容,使得用户更感兴趣,从而提升用户体验,提高用户粘度,之前我们曾经使用协同过滤算法构建过个性化推荐系统,但基于显式反馈的算法就会有一定的局限性,本次我们使用无监督的Lda文本聚类方式来构建文本的个性化推荐系统。 推荐算法:协同过滤

OCR -- 文本检测 - 训练DB文字检测模型

PaddleOCR提供DB文本检测算法,支持MobileNetV3、ResNet50_vd两种骨干网络,可以根据需要选择相应的配置文件,启动训练。 本节以icdar15数据集、MobileNetV3作为骨干网络的DB检测模型(即超轻量模型使用的配置)为例,介绍如何完成PaddleOCR中文字检测模型的训练、评估与测试。

Lfu缓存在Rust中的实现及源码解析

综上所述,LFU算法通过跟踪数据项的访问频次来决定淘汰对象,适用于数据访问频率差异较大的场景。与LRU相比,LFU更能抵御偶发性的大量访问请求对缓存的冲击。然而,LFU的实现较为复杂,需要综合考虑效率和公平性。在实际应用中,应当根据具体的数据访问模式和系统需求,灵活选择和调整缓存算法,以达到最优的性...