Swift 最大子数组
来源:互联网 发布:景观大数据软件课程 编辑:程序博客网 时间:2024/06/07 05:54
用递归吧,分治策略,求最大子数组
//: Playground - noun: a place where people can playimport UIKitvar str = "Hello, playground"var A = [13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7]for i in 0..<A.count { print(A[i]) }func FINDMAXCROSSINGSUBARRAY(A:[Int],low:Int,mid:Int,high:Int)->(maxleft:Int,maxright:Int,lr:Int){ var sum = 0 var maxleft = 0 var maxright = 0 var left_sum = -1000; for i in stride(from: mid, through: low, by: -1) { sum = A[i] + sum if(sum > left_sum) { left_sum = sum maxleft = i } } var right_sum = -1000 sum = 0 for j in mid+1...high { sum += A[j] if(sum > right_sum) { right_sum = sum maxright = j } } return(maxleft,maxright,left_sum+right_sum) }func FINDMAXIMUMSUBARRAY(A:[Int],low:Int,high:Int) ->(l:Int,h:Int,zhi:Int){ if (high == low) { return (low,high,A[low]) } else { let mid = (low+high)/2 let a = FINDMAXIMUMSUBARRAY(A: A, low: low, high: mid) let b = FINDMAXIMUMSUBARRAY(A: A, low: mid+1, high: high) let c = FINDMAXCROSSINGSUBARRAY(A: A, low: low, mid: mid, high: high) if(a.zhi >= b.zhi && a.zhi >= c.lr) {return (a.l,a.h,a.zhi)} else if (b.zhi >= a.zhi && b.zhi >= c.lr) { return (a.l,b.h,b.zhi)} else {return (c.maxleft,c.maxright,c.lr)} }}FINDMAXIMUMSUBARRAY(A: A, low: 0, high: A.count-1)
0 0
- Swift 最大子数组
- 求最大子数组
- 求最大子数组
- 子数组和最大
- 求最大子数组
- 最大子数组
- 最大子数组和
- 最大子数组和
- 子数组最大和
- 子数组最大乘积
- 最大子数组
- 最大子数组乘积
- 最大子数组和
- 子数组最大和
- 子数组最大和
- 最大子数组二
- 最大连续子数组
- 最大子数组问题
- Java Class文件详解
- HTML5和微信小程序最近挺火的
- redis 数据库中Set的使用方法
- Machine Learning (Python)
- 无止境循环
- Swift 最大子数组
- 线程池相关介绍
- 数据结构4--查找和排序
- 我能想到的设计模式在项目中的应用
- JSP几个常用的内置对象(+Cookie对象)
- 指针的简单定义
- java-异常处理机制
- 链表的简易实现
- win32强化练习5.1_动画秒表(位图初步)