首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Python-VBA编程500例-006(入门级)

  • 25-03-03 08:01
  • 4140
  • 13722
blog.csdn.net

目录

1、寻找下一个更大数:

1-1、Python:

1-2、VBA:

2、相关文章:

Python算法之旅:http://iyenn.com/rec/1699032.html?spm=1001.2014.3001.5502 

个人主页:非风V非雨-CSDN博客

欢迎志同道合者一起交流学习,我的QQ:94509325/微信号

        在算法中,寻找下一个更大数(Next Greater Element)具有多种实际意义和应用。常见的有以下几种:
1、数据排序与查询:在需要频繁对数据进行排序和查询的场景中,快速找到某个元素的下一个更大数能够显著提高算法的效率。例如,在有序数组中查找某个元素的下一个更大数,可以避免对整个数组进行线性搜索,而是利用有序性进行更高效的搜索。

2、数据流处理:在处理数据流(如实时传感器数据、股票价格等)时,快速识别数据的趋势变化至关重要。通过寻找下一个更大数,可以及时发现数据中的上升沿(即数据从较小值变为较大值的点),这对于预测未来趋势、触发警报或执行其他基于阈值的操作非常有用。

3、优化数据结构:在构建或优化数据结构时,了解元素的下一个更大数有助于设计更高效的插入、删除和查找操作。例如,在构建堆(Heap)或优先队列(Priority Queue)时,维护元素的顺序和快速找到下一个更大数对于保持数据结构的性能至关重要。

4、算法竞赛与编程挑战:在算法竞赛和编程挑战中,寻找下一个更大数的问题经常出现,这要求参赛者具备解决此类问题的能力。通过掌握相关的算法和数据结构,参赛者可以更有效地解决这些问题,并在竞赛中取得更好的成绩。

5、实际应用场景:在现实生活中,寻找下一个更大数的算法可以应用于各种场景。例如,在股票市场分析中,通过找到某只股票价格的下一个更大数,可以预测其未来可能的上涨趋势;在图像处理中,通过寻找像素值的下一个更大数,可以实现边缘检测或特征提取等操作。

        综上所述,寻找下一个更大数在算法中具有广泛的应用和实际意义,它不仅可以提高算法的效率,还可以帮助我们更好地理解数据和解决问题。

1、寻找下一个更大数:
1-1、Python:
  1. # 1.问题描述:
  2. # 两个不重复的数组arr1和arr2,其中arr1是arr2的子集,在arr2的相应位置找到arr1所有元素的下一个更大数字.
  3. # arr1中数字x的下一个更大数字是arr2中x右边第1个更大的数字.如果它不存在,则为此数字返回-1.arr1和arr2中的所有数字都是唯一的,且长度尽量控制在1000以内.
  4. # 2.问题示例:
  5. # 输入arr1=[3,5,10,7],arr2=[3,5,6,8,10,11,24,7],输出[5,6,11,-1].对于数组arr1中的第1个元素3,在arr2中的下一个更大数字是5;对于数组arr1中的第2个元素5,在arr2中的下一个更大数字是6;
  6. # 对于数组arr1中的第3个元素10,在arr2中的下一个更大数字是11;对于数组arr1中的第4个元素7,在arr2中没有下一个更大的元素,因此返回-1.
  7. # 3.代码实现:
  8. class Solution:
  9. # 参数arr1: 整数数组
  10. # 参数arr2: 整数数组
  11. # 返回值: 整数数组
  12. def nextGreaterElement(self, arr1, arr2):
  13. answer = {}
  14. stack = []
  15. for x in arr2:
  16. while len(stack) != 0 and stack[-1] < x: # len(stack)!=0代码可简写为stack,stack[-1]表示列表stack中最后一个元素.
  17. answer[stack[-1]] = x
  18. del stack[-1]
  19. stack.append(x)
  20. for x in stack:
  21. answer[x] = -1
  22. return [answer[x] for x in arr1]
  23. # 主函数
  24. if __name__ == '__main__':
  25. solution =Solution()
  26. arr1 = [3, 5, 10, 7]
  27. arr2 = [3, 5, 6, 8, 10, 11, 24, 7]
  28. print("输入arr1:", arr1)
  29. print("输入arr2:", arr2)
  30. print("输出:", solution.nextGreaterElement(arr1, arr2))
  31. # 4.运行结果:
  32. # 输入arr1: [3, 5, 10, 7]
  33. # 输入arr2: [3, 5, 6, 8, 10, 11, 24, 7]
  34. # 输出: [5, 6, 11, -1]
1-2、VBA:
  1. Rem 自定义函数,功能:寻找下一个更大数
  2. Function FindNextGreaterElements(arr1 As Variant, arr2 As Variant) As Variant
  3. Dim dict As Object
  4. Dim i As Long, j As Long
  5. Dim nextGreater As Variant
  6. Dim result() As Variant
  7. '创建字典对象
  8. Set dict = CreateObject("Scripting.Dictionary") '此处需要引用控件:Microsoft Scripting Runtime,即对应系统路径下的动态库:C:\Windows\SysWOW64\scrrun.dll
  9. '遍历arr2,为每个元素找到下一个更大元素并存入字典
  10. For i = LBound(arr2) To UBound(arr2) - 1
  11. nextGreater = -1 '初始化nextGreater为-1,表示尚未找到
  12. For j = i + 1 To UBound(arr2)
  13. If arr2(j) > arr2(i) Then
  14. nextGreater = arr2(j) '找到下一个更大元素
  15. Exit For '跳出内层循环
  16. End If
  17. Next j
  18. dict.Add arr2(i), nextGreater '将当前元素和它的下一个更大元素存入字典
  19. Next i
  20. '如果arr2不是空的,给最后一个元素添加-1到字典,因为它没有下一个元素
  21. If UBound(arr2) >= LBound(arr2) Then
  22. dict.Add arr2(UBound(arr2)), -1
  23. End If
  24. '初始化结果数组
  25. ReDim result(LBound(arr1) To UBound(arr1))
  26. '遍历arr1,查找并返回每个元素的下一个更大元素
  27. For i = LBound(arr1) To UBound(arr1)
  28. If dict.Exists(arr1(i)) Then
  29. result(i) = dict(arr1(i)) '从字典中获取arr1(i)的下一个更大元素
  30. Else
  31. result(i) = -1 '如果arr1中的元素不在arr2中,返回-1
  32. End If
  33. Next i
  34. '返回结果数组
  35. FindNextGreaterElements = result
  36. End Function
  37. Rem 执行过程,功能:调用自定义函数FindNextGreaterElements,并在立即窗口输出结果
  38. Sub TestRun()
  39. Dim arr1 As Variant
  40. Dim arr2 As Variant
  41. Dim result As Variant
  42. Dim i As Long
  43. arr1 = Array(3, 5, 10, 7)
  44. arr2 = Array(3, 5, 6, 8, 10, 11, 24, 7)
  45. result = FindNextGreaterElements(arr1, arr2) '调用自定义函数FindNextGreaterElements
  46. Dim str1 As String
  47. Debug.Print "输入arr1:"
  48. For i = LBound(arr1) To UBound(arr1)
  49. Debug.Print arr1(i)
  50. Next i
  51. Debug.Print "输入arr2:"
  52. For i = LBound(arr2) To UBound(arr2)
  53. Debug.Print arr2(i)
  54. Next i
  55. Debug.Print "输出:"
  56. For i = LBound(result) To UBound(result)
  57. Debug.Print result(i)
  58. Next i
  59. End Sub

注意:1-2中的代码需粘贴到你的VBA编辑器中,按F5执行TestRun程序,在立即窗口输出结果。

2、相关文章:

2-1、Python-VBA编程500例-005-01(入门级)

2-2、Python-VBA编程500例-005-02(入门级)

2-3、Python-VBA编程500例-007(入门级)

2-4、Python-VBA编程500例-008(入门级) 

Python算法之旅:http://iyenn.com/rec/1699032.html?spm=1001.2014.3001.5502 
个人主页:非风V非雨-CSDN博客
欢迎志同道合者一起交流学习,我的QQ:94509325/微信号:

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览60120 人正在系统学习中
遨游码海,我心飞扬
微信名片
注:本文转载自blog.csdn.net的神奇夜光杯的文章"https://myelsa1024.blog.csdn.net/article/details/136745179"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top