• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[神梦] 【每日一题】最长零串 - 2022.5.12 [复制链接]

1#
题目描述

给定一个数字列表,请编写一个函数,找出其中长度最长的总和等于0的连续字串。数字允许出现正数和负数。

【示例】
输入:[1, 2, -3, 7, 8, -16]
输出:[1, 2, -3]
解释:连续相邻且总和为0的最长串就是1, 2, -3。

题目难度:中等
题目来源:CodeWars-Longest sequence with zero sum
题目交流: 584781753
  1. ' 请将断言插件升级到 v1.1
  2. Import "SmAssert.dll"

  3. Function 最长零串(数字列表)
  4.     // 您的代码写在这里
  5. End Function


  6. SmAssert.That 最长零串(Array(-1, 0, 1)) ,"=", Array(-1, 0, 1)
  7. SmAssert.That 最长零串(Array(1, 2, -3, 7, 8, -16)) ,"=", Array(1, 2, -3)
  8. SmAssert.That 最长零串(Array(25, -35, 12, 6, 92, -115, 17, 2, 2, 2, -7, 2, -9, 16, 2, -11)) ,"=", Array(92, -115, 17, 2, 2, 2)
复制代码

参考题解

  1. ' 请将断言插件升级到 v1.1
  2. Import "SmAssert.dll"

  3. VBSBegin
  4.     '【作者】:神梦无痕
  5.     '【QQ】:1042207232
  6.     '【Q群】:584781753
  7.     
  8.     ' 数组求和
  9.     Function Sum(List, StartIndex, EndIndex)
  10.         Dim Result, i
  11.         Result = 0
  12.         If StartIndex >= LBound(List) And EndIndex <= UBound(List) Then
  13.             For i = StartIndex To EndIndex
  14.                 Result = Result + List(i)
  15.             Next
  16.         End If
  17.         Sum = Result
  18.     End Function
  19.     
  20.     ' 数组切片
  21.     Function Slice(List, StartIndex, EndIndex)
  22.         Dim Result, i
  23.         ReDim Result(EndIndex-StartIndex)
  24.         If StartIndex >= LBound(List) And EndIndex <= UBound(List) Then
  25.             For i = StartIndex To EndIndex
  26.                 Result(i-StartIndex) = List(i)
  27.             Next
  28.         End If
  29.         Slice = Result
  30.     End Function
  31. VBSEnd
  32. Function 最长零串(数字列表)
  33.     
  34.     '【作者】:神梦无痕
  35.     '【QQ】:1042207232
  36.     '【Q群】:584781753
  37.     
  38.     Dim 零和列表
  39.     Dim i, j
  40.     
  41.     零和列表 = Array()
  42.     For i = 0 To UBound(数字列表)
  43.         For j = i + 1 To UBound(数字列表)
  44.             If Sum(数字列表, i, j) = 0 And (j - i) > UBound(零和列表) Then
  45.                 零和列表 = Slice(数字列表, i, j)
  46.             End If
  47.         Next
  48.     Next
  49.     最长零串 = 零和列表
  50. End Function


  51. SmAssert.That 最长零串(Array(-1, 0, 1)) ,"=", Array(-1, 0, 1)
  52. SmAssert.That 最长零串(Array(1, 2, -3, 7, 8, -16)) ,"=", Array(1, 2, -3)
  53. SmAssert.That 最长零串(Array(25, -35, 12, 6, 92, -115, 17, 2, 2, 2, -7, 2, -9, 16, 2, -11)) ,"=", Array(92, -115, 17, 2, 2, 2)
复制代码





插件下载

 
【插件】神梦断言插件 SmAssert.dll,帮助开发者发现业务逻辑错误

2#

sfsfsfsfs

3#

学习

4#

asdfasdfasdfasdf

发新话题 回复该主题