在写上一随笔之前,在Codility网站上还做了一个道题(非Demo题):CountBoundedSlices,得了60分(害臊呀)。今天又重新做了一下这个算法,性能提高了不少,但由于此题不是Demo题,不能重新在Codility网站测试了。

可以从http://codility.com/cert/view/certAWY5VP-D46CA7989XU4XEZT/details看到题目的详细信息。

这里把题目copy出来:

An integer K and a non-empty zero-indexed array A consisting of N integers are given.

A pair of integers (P, Q), such that 0 ≤ P ≤ Q < N, is called aslice of array A.

bounded_slice is a slice in which the difference between the maximum and minimum values in the slice is less than or equal to K. More precisely it is a slice, such that max(A[P], A[P + 1], ..., A[Q]) − min(A[P], A[P + 1], ..., A[Q]) ≤ K.

The goal is to calculate the number of bounded_slices.

以下新做的算法及第一次做的算法贴在下面:

def solution(K, A):
# http://codility.com/cert/view/certAWY5VP-D46CA7989XU4XEZT/details
_ret_numer = 0
_count = len(A)
for _inx in range(_count):
_max_int = None
_min_int = None
for _inx2 in range(_inx,_count):
if _max_int is None:
_max_int = A[_inx2]
else:
if _max_int < A[_inx2]:
_max_int = A[_inx2]
if _min_int is None:
_min_int = A[_inx2]
else:
if _min_int > A[_inx2]:
_min_int = A[_inx2] if _max_int - _min_int <= K:
_ret_numer += 1
else:
break
return _ret_numer def solution2(K, A): def sum_special(number, times):
return sum(range(number, number-times, -1))
_ret_numer = 0
_current_inx = 0 # current index
_loop_inx = _current_inx # loop index for array.
_minvalue_inx = _current_inx # index of min value for a loop break.
_maxvalue_inx = _current_inx # index of max value for a loop break.
_count = len(A) # array length
while _loop_inx < _count: # compare two values, get max
if A[_maxvalue_inx] < A[_loop_inx]:
_maxvalue_inx = _loop_inx
# compare two values, get min
if A[_minvalue_inx] > A[_loop_inx]:
_minvalue_inx = _loop_inx # break if meeting condition.
if A[_maxvalue_inx] - A[_minvalue_inx] > K:
_first_inx = None
_second_inx = None
if _minvalue_inx <= _maxvalue_inx:
_first_inx, _second_inx = _minvalue_inx, _maxvalue_inx
else:
_first_inx, _second_inx = _maxvalue_inx, _minvalue_inx _ret_numer += sum_special(_second_inx-_current_inx, _first_inx-_current_inx+1) _current_inx = _first_inx + 1 # move next to first_inx
_loop_inx = _current_inx
_minvalue_inx = _current_inx # index of min value for a loop break.
_maxvalue_inx = _current_inx # index of max value for a loop break
else:
_loop_inx += 1 # increment one
if _current_inx != _loop_inx:
_ret_numer += sum_special(_loop_inx-_current_inx, _loop_inx-_current_inx) return _ret_numer

关于新做的算法,虽然性能提高了很多,但我还是不是很满意,因为_loop_inx在每次满足K条件计算后还要重新回溯到_current_inx位置,按理说应该通过记录更多数据达到不需要回退,试了几次发现复杂度陡升。

列了测试case:

def test(K, A):
print K, len(A), A[:10]
import time
_start = time.time()
_value = solution(K, A)
_end = time.time()
print "solution result: time=%f, value=%d" % (_end-_start, _value)
_start = time.time()
_value2 = solution2(K, A)
_end = time.time()
print "solution2 result: time=%f, value=%d" % (_end-_start, _value2)
return _value == _value2 def sample_test():
import random
N = random.randint(1,100000)
A = [random.randint(-1000000000,1000000000) for _ in xrange(N)]
K = random.randint(0,1000000000)
return test(K, A) def simulate_test(times=100):
_error_occur = False
print "simulate start..."
for _ in range(times):
if not sample_test():
_error_occur = True
break
if _error_occur:
print "occur error, please check it"
print "simulate complete"

以下是随机做100次,两次算法测试结果对比。可以看到两此算法得到time差距挺大的,如果codility网站测试,应该能够高于60分吧。

>>> simulate_test(times=)
simulate start...
[, -, , -, -, , , -, , -]
solution result: time=2.067000, value=
solution2 result: time=0.028000, value=
[, -, -, -, -, , -, -, -, -]
solution result: time=9.547000, value=
solution2 result: time=0.060000, value=
[-, , , -, -, -, , , , -]
solution result: time=25.332000, value=
solution2 result: time=0.104000, value=
[, , , , , , -, -, -, ]
solution result: time=0.013000, value=
solution2 result: time=0.002000, value=
[-, , , -, , -, , , -, -]
solution result: time=1.731000, value=
solution2 result: time=0.030000, value=
[-, , , , -, -, , , -, -]
solution result: time=29.778000, value=
solution2 result: time=0.124000, value=
[, -, -, -, -, , , -, -, -]
solution result: time=7.330000, value=
solution2 result: time=0.055000, value=
[, , -, , -, -, -, -, , ]
solution result: time=0.580000, value=
solution2 result: time=0.014000, value=
[-, -, , , -, -, -, , -, ]
solution result: time=0.011000, value=
solution2 result: time=0.002000, value=
[-, -, -, -, , -, , , , -]
solution result: time=1.124000, value=
solution2 result: time=0.026000, value=
[, , , -, -, , -, -, -, ]
solution result: time=7.352000, value=
solution2 result: time=0.053000, value=
[-, , -, -, , -, -, -, , ]
solution result: time=17.873000, value=
solution2 result: time=0.084000, value=
[, -, -, , , -, , -, -, ]
solution result: time=0.894000, value=
solution2 result: time=0.017000, value=
[-, -, -, , , -, , -, , -]
solution result: time=9.026000, value=
solution2 result: time=0.064000, value=
[, -, , -, -, , , , , ]
solution result: time=37.246000, value=
solution2 result: time=0.106000, value=
[-, , , -, , -, , , , ]
solution result: time=0.057000, value=
solution2 result: time=0.005000, value=
[, , -, -, , , -, -, -, -]
solution result: time=27.318000, value=
solution2 result: time=0.116000, value=
[-, , -, -, , -, , -, , ]
solution result: time=29.328000, value=
solution2 result: time=0.108000, value=
[, , , -, -, , -, -, , ]
solution result: time=4.457000, value=
solution2 result: time=0.044000, value=
[, -, , , -, , -, , -, ]
solution result: time=27.306000, value=
solution2 result: time=0.112000, value=
[, -, , -, -, -, -, , , -]
solution result: time=0.406000, value=
solution2 result: time=0.012000, value=
[-, -, -, , , , -, , , -]
solution result: time=16.640000, value=
solution2 result: time=0.094000, value=
[-, , -, , , , -, , , ]
solution result: time=0.816000, value=
solution2 result: time=0.019000, value=
[, -, , , , -, -, -, -, ]
solution result: time=0.104000, value=
solution2 result: time=0.007000, value=
[, , -, , , -, , , , -]
solution result: time=10.739000, value=
solution2 result: time=0.064000, value=
[, -, -, -, -, , , , , -]
solution result: time=43.970000, value=
solution2 result: time=0.121000, value=
[, -, -, , , , , , -, -]
solution result: time=26.614000, value=
solution2 result: time=0.114000, value=
[-, , -, , -, , , -, -, ]
solution result: time=40.215000, value=
solution2 result: time=0.116000, value=
[, , , -, , , , , , ]
solution result: time=13.974000, value=
solution2 result: time=0.075000, value=
[, -, -, -, , , , -, , -]
solution result: time=0.337000, value=
solution2 result: time=0.010000, value=
[-, -, -, , , , -, , , ]
solution result: time=1.821000, value=
solution2 result: time=0.029000, value=
[, , , -, , , , , , -]
solution result: time=23.379000, value=
solution2 result: time=0.098000, value=
[-, , , -, , , , , , ]
solution result: time=46.241000, value=
solution2 result: time=0.137000, value=
[, , , , -, -, , -, -, ]
solution result: time=19.033000, value=
solution2 result: time=0.096000, value=
[, -, , , -, , -, -, , ]
solution result: time=0.246000, value=
solution2 result: time=0.011000, value=
[, -, -, , , , , , , ]
solution result: time=25.029000, value=
solution2 result: time=0.093000, value=
[-, , , -, -, -, -, , -, ]
solution result: time=24.828000, value=
solution2 result: time=0.113000, value=
[-, , -, -, , -, -, -, -, ]
solution result: time=33.016000, value=
solution2 result: time=0.121000, value=
[, , , , , -, -, , -, ]
solution result: time=0.939000, value=
solution2 result: time=0.018000, value=
[, , -, , -, , , -, , -]
solution result: time=24.851000, value=
solution2 result: time=0.088000, value=
[, -, , , , , , , -, ]
solution result: time=4.077000, value=
solution2 result: time=0.038000, value=
[-, , , -, -, , , -, -, ]
solution result: time=1.293000, value=
solution2 result: time=0.025000, value=
[, -, -, , , -, , -, , ]
solution result: time=30.663000, value=
solution2 result: time=0.113000, value=
[, , , , -, -, -, -, , -]
solution result: time=1.144000, value=
solution2 result: time=0.024000, value=
[, -, , -, , -, -, , -, ]
solution result: time=2.057000, value=
solution2 result: time=0.030000, value=
[, , -, -, -, -, -, , , ]
solution result: time=15.251000, value=
solution2 result: time=0.076000, value=
[, , , , , -, -, -, , -]
solution result: time=1.286000, value=
solution2 result: time=0.026000, value=
[-, -, -, , , -, , , -, -]
solution result: time=0.239000, value=
solution2 result: time=0.009000, value=
[-, , , -, -, -, , -, , ]
solution result: time=0.073000, value=
solution2 result: time=0.009000, value=
[, -, -, -, , , -, , , -]
solution result: time=34.535000, value=
solution2 result: time=0.140000, value=
[, -, , , , -, , , -, -]
solution result: time=9.660000, value=
solution2 result: time=0.076000, value=
[-, , -, -, , , , -, , -]
solution result: time=11.874000, value=
solution2 result: time=0.073000, value=
[, -, -, , , -, , , -, -]
solution result: time=11.689000, value=
solution2 result: time=0.063000, value=
[, -, -, , , -, , , -, ]
solution result: time=20.965000, value=
solution2 result: time=0.088000, value=
[-, -, , -, -, , -, -, -, ]
solution result: time=3.483000, value=
solution2 result: time=0.040000, value=
[-, , , , -, , -, , , ]
solution result: time=12.949000, value=
solution2 result: time=0.077000, value=
[-, -, -, , , , -, , -, ]
solution result: time=12.332000, value=
solution2 result: time=0.077000, value=
[, -, -, -, , -, -, , , -]
solution result: time=17.879000, value=
solution2 result: time=0.087000, value=
[, -, -, -, -, -, -, , , -]
solution result: time=37.262000, value=
solution2 result: time=0.137000, value=
[-, , -, -, -, -, , -, -, -]
solution result: time=34.129000, value=
solution2 result: time=0.129000, value=
[, -, -, -, , , , , , ]
solution result: time=31.118000, value=
solution2 result: time=0.130000, value=
[-, , -, -, , , -, -, , ]
solution result: time=37.183000, value=
solution2 result: time=0.117000, value=
[-, , , , , -, -, -, , -]
solution result: time=15.267000, value=
solution2 result: time=0.080000, value=
[-, , , -, -, , -, -, , -]
solution result: time=16.971000, value=
solution2 result: time=0.076000, value=
[, -, , , , -, -, , , ]
solution result: time=26.181000, value=
solution2 result: time=0.109000, value=
[-, , , -, -, -, , -, , ]
solution result: time=10.175000, value=
solution2 result: time=0.063000, value=
[, -, , -, -, , , -, , ]
solution result: time=0.538000, value=
solution2 result: time=0.019000, value=
[-, -, -, , , -, -, , -, -]
solution result: time=0.004000, value=
solution2 result: time=0.001000, value=
[-, -, , -, -, -, -, -, , -]
solution result: time=13.853000, value=
solution2 result: time=0.064000, value=
[, , -, -, -, -, , , -, ]
solution result: time=19.379000, value=
solution2 result: time=0.108000, value=
[-, , -, -, , -, -, , -, ]
solution result: time=14.006000, value=
solution2 result: time=0.077000, value=
[-, , , , , , -, , , ]
solution result: time=33.683000, value=
solution2 result: time=0.119000, value=
[-, -, , -, -, -, , -, -, -]
solution result: time=13.952000, value=
solution2 result: time=0.086000, value=
[, , -, -, -, -, , , -, ]
solution result: time=7.784000, value=
solution2 result: time=0.060000, value=
[, -, , -, -, -, -, , , ]
solution result: time=39.554000, value=
solution2 result: time=0.118000, value=
[-, , -, , , , , -, -, ]
solution result: time=8.962000, value=
solution2 result: time=0.063000, value=
[-, , , , , , , , , ]
solution result: time=13.551000, value=
solution2 result: time=0.066000, value=
[-, , -, -, -, -, , -, -, ]
solution result: time=46.575000, value=
solution2 result: time=0.193000, value=
[-, -, , -, -, , , , , ]
solution result: time=17.800000, value=
solution2 result: time=0.096000, value=
[-, -, -, -, -, , -, -, -, ]
solution result: time=8.196000, value=
solution2 result: time=0.059000, value=
[-, , , , , -, , -, -, -]
solution result: time=1.367000, value=
solution2 result: time=0.026000, value=
[-, , -, -, , -, , -, , -]
solution result: time=34.445000, value=
solution2 result: time=0.104000, value=
[, , -, -, , -, -, -, -, ]
solution result: time=6.394000, value=
solution2 result: time=0.057000, value=
[-, -, -, , -, , -, -, , -]
solution result: time=0.540000, value=
solution2 result: time=0.015000, value=
[-, , , -, , , -, , -, -]
solution result: time=16.369000, value=
solution2 result: time=0.093000, value=
[, -, -, , -, -, , -, , -]
solution result: time=0.908000, value=
solution2 result: time=0.019000, value=
[-, , , -, , , -, , , ]
solution result: time=2.199000, value=
solution2 result: time=0.033000, value=
[-, -, -, -, , -, , -, -, -]
solution result: time=19.046000, value=
solution2 result: time=0.093000, value=
[, , -, -, -, , -, , -, ]
solution result: time=4.440000, value=
solution2 result: time=0.042000, value=
[-, , , , , , -, , -, -]
solution result: time=5.149000, value=
solution2 result: time=0.057000, value=
[, , , -, -, -, , , -, ]
solution result: time=20.987000, value=
solution2 result: time=0.089000, value=
[-, , -, , , , , , -, -]
solution result: time=0.585000, value=
solution2 result: time=0.017000, value=
[, -, , , -, -, , , -, ]
solution result: time=30.561000, value=
solution2 result: time=0.128000, value=
[, , -, , -, , , -, -, -]
solution result: time=44.342000, value=
solution2 result: time=0.119000, value=
[-, -, -, , -, , , , , ]
solution result: time=36.514000, value=
solution2 result: time=0.108000, value=
[-, , -, -, , , , , , -]
solution result: time=33.019000, value=
solution2 result: time=0.123000, value=
[, , , , -, , , , , -]
solution result: time=13.259000, value=
solution2 result: time=0.091000, value=
[, -, -, -, , , , -, , -]
solution result: time=33.030000, value=
solution2 result: time=0.116000, value=
[-, -, , -, , -, -, -, , ]
solution result: time=34.337000, value=
solution2 result: time=0.129000, value=
[-, , -, -, , -, -, , , -]
solution result: time=0.360000, value=
solution2 result: time=0.010000, value=
simulate complete
>>>

做了codility网站上一题:CountBoundedSlices的更多相关文章

  1. IIS7.5 在已有的WEB网站上配置FTP发布

    IIS7.5 有了很多新特性,例如FashCGI,Rewrite 模块的内置,简易的FTP发布等等,但是即使是微软,也没有详细的文档,本文详细的介绍了如何在现有的WEB网站上建立FTP发布. IIS ...

  2. onhashchange事件,只需要修改hash值即可响应onhashchange事件中的函数(适用于上一题下一题和跳转页面等功能)

    使用实例: 使用onhashchange事件做一个简单的上一页下一页功能,并且当刷新页面时停留在当前页 html: <!DOCTYPE html><html><body& ...

  3. 如何直接在github网站上更新你fork的repo?

    玩过github的人一定会在你自己的账号上fork了一些github开源项目.这些开源项目往往更新比较活跃,你今天fork用到你自己的项目中去了,过几个星期这个fork的origin可能有一些bugf ...

  4. 我30天在Stack Overflow问答网站上回答问题的感受

    想法的萌芽 如果非要总结下我多年来是如何使用Stack Overflow的话,我的答案就是:打开网页,搜索问题,查看Stack Overflow的搜索结果,参考答案,最后再关掉网页. 我的生活已经离不 ...

  5. 如何做高大上的网站布局 -------------------->>转至(卧牛SEO/武汉SEO http://blog.sina.com.cn/zhengkangseo )

    SEO开始做,最重要的是网站布局,一个网站布局决定了用户在网站的停留时间,在网站中放入用户想要的内容之外,更重要的是要让用户看到网站之后,一目了然,视觉和感官上良好的体验.那新手该如何做网站布局呢? ...

  6. Http post请求数据分析 --作者, 你的这个需求我可以做, 我在平台上无法给你发消息和接收你的任务, 所以,如果你看到这个信息, 可以联系我.

    Http post请求数据分析 作者, 你的这个需求我可以做, 我在平台上无法给你发消息和接收你的任务, 所以,如果你看到这个信息, 可以联系我. 软件需求就是不停post一个网址,然后根据返回的信息 ...

  7. 淘宝网站上的 HTTP 缓存问题两则

    在阅读本文前推荐你先阅读我的前两篇文章< 扼杀 304,Cache-Control: immutable>和<关于缓存和 Chrome 的“新版刷新”>:下面要说的两个问题是在 ...

  8. gitHub网站上常见英语翻译2

    repositories资料库 compilers with rich code analysis APIs.编译器具有丰富的代码分析API. plugins插件 With a variety of ...

  9. 刚刚做了个文件上传功能,拿来分享一下!(MVC架构及传统架构通用)

    文件上传无论在软件还是在网站上都十分常见,我今天再把它拿出来,讲一下,主要讲一下它的设计思想和实现技术,为了它的通用性,我把它做在了WEB.Service项目里,即它是针对服务器的,它的结构是关联UI ...

随机推荐

  1. 小白日记20:kali渗透测试之后渗透测试阶段(一)--上传工具

    后渗透测试阶段--上传工具 为防止管理员将漏洞补上后,我们无法再通过该漏洞控制对方主机,所以需要进行后渗透测试阶段 1.上传各种工具 2.提权:为了全面控制目标系统 3.擦除攻击痕迹:防止管理员通过日 ...

  2. Maven学习小结(五 pom.xml详解[转])

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  3. [课程相关]homework-02

    一.如何组织代码 因为这个代码比较简单,用函数就足够了,个人觉得没必要用类,杀鸡不必用牛刀. 代码有点长,主要是加了很多判断参数的部分. 提取了一个公共的递归函数. 用了不少全局变量,可能当做参数传入 ...

  4. Android数据库的使用

    学了web好久没继续做,现在做android开发断断续续也近一年了,实习是android,现在毕业了工作也是android,但是对于数据库这块由于最近项目需要就研究了下其常用操作,这篇博客中的观点仅代 ...

  5. LeetCode 268

    Missing Number Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one ...

  6. Android中IntentService的原理及使用

    在Android开发中,我们或许会碰到这么一种业务需求,一项任务分成几个子任务,子任务按顺序先后执行,子任务全部执行完后,这项任务才算成功.那么,利用几个子线程顺序执行是可以达到这个目的的,但是每个线 ...

  7. 转:基于Webrtc的跨平台实时语音通信解决方案(讲座)

    转:http://edu.csdn.net/course/detail/320/

  8. VS中的波浪线

    绿色波浪线: 如果你的代码中出现了绿色的波浪线,说明你的代码语法并没有错误, 只不过提示你有可能会出现错误,但是不一定会出现错误.警告线 红色波浪线: 如果你的代码中出现了红色的波浪线,意味着你的代码 ...

  9. 关于Could not parse configuration: /hibernate.cfg.xml的问题

    第一次在eclipse上配置hibernate,问题百出啊,比如下面的org.hibernate.HibernateException: Could not parse configuration: ...

  10. asp自动补全html标签自动闭合(正则表达式)

    Function closeHTML(strContent) Dim arrTags, i, OpenPos, ClosePos, re, strMatchs, j, Match Set re = N ...