diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 041. \346\273\221\345\212\250\347\252\227\345\217\243\347\232\204\345\271\263\345\235\207\345\200\274/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 041. \346\273\221\345\212\250\347\252\227\345\217\243\347\232\204\345\271\263\345\235\207\345\200\274/README.md" index 2cfa24adecd46..17edcda838b61 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 041. \346\273\221\345\212\250\347\252\227\345\217\243\347\232\204\345\271\263\345\235\207\345\200\274/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 041. \346\273\221\345\212\250\347\252\227\345\217\243\347\232\204\345\271\263\345\235\207\345\200\274/README.md" @@ -172,6 +172,36 @@ func (this *MovingAverage) Next(val int) float64 { */ ``` +#### Swift + +```swift +class MovingAverage { + private var arr: [Int] + private var s: Int + private var cnt: Int + + init(_ size: Int) { + arr = [Int](repeating: 0, count: size) + s = 0 + cnt = 0 + } + + func next(_ val: Int) -> Double { + let idx = cnt % arr.count + s += val - arr[idx] + arr[idx] = val + cnt += 1 + return Double(s) / Double(min(cnt, arr.count)) + } +} + +/** + * Your MovingAverage object will be instantiated and called as such: + * let obj = MovingAverage(size) + * let param_1 = obj.next(val) + */ +``` + diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 041. \346\273\221\345\212\250\347\252\227\345\217\243\347\232\204\345\271\263\345\235\207\345\200\274/Solution.swift" "b/lcof2/\345\211\221\346\214\207 Offer II 041. \346\273\221\345\212\250\347\252\227\345\217\243\347\232\204\345\271\263\345\235\207\345\200\274/Solution.swift" new file mode 100644 index 0000000000000..df3f70ee17cc5 --- /dev/null +++ "b/lcof2/\345\211\221\346\214\207 Offer II 041. \346\273\221\345\212\250\347\252\227\345\217\243\347\232\204\345\271\263\345\235\207\345\200\274/Solution.swift" @@ -0,0 +1,25 @@ +class MovingAverage { + private var arr: [Int] + private var s: Int + private var cnt: Int + + init(_ size: Int) { + arr = [Int](repeating: 0, count: size) + s = 0 + cnt = 0 + } + + func next(_ val: Int) -> Double { + let idx = cnt % arr.count + s += val - arr[idx] + arr[idx] = val + cnt += 1 + return Double(s) / Double(min(cnt, arr.count)) + } +} + +/** + * Your MovingAverage object will be instantiated and called as such: + * let obj = MovingAverage(size) + * let param_1 = obj.next(val) + */ \ No newline at end of file