# -*- coding:utf-8 -*-
# Author='长孤秋落' '2024/1/28'
# 博客:https://blog.csdn.net/weixin_36928396?type=blog
# may the odds be ever in your favor
import psutil
import time
import gc
version = '1.0.1.0'
def get_execution_time(func, *args, **kwargs):
start_time = time.time()
tmpresult = func(*args, **kwargs)
end_time = time.time()
exec_time = end_time-start_time
result = {'exec_time':exec_time, 'result':tmpresult}
return result
def get_memory_usage(func, *args, **kwargs):
process = psutil.Process()
before_mem = process.memory_info().rss
tmpresult = func(*args, **kwargs)
after_mem = process.memory_info().rss
mem_use = abs(after_mem - before_mem)
gc.collect()
result = {'mem_use':mem_use, 'result':tmpresult}
return result
"""
get_memory_usage_ext:通过多次计算,取最大值胡方式获取较为稳定的内存用量
"""
def get_memory_usage_ext(func, *args, **kwargs):
max_mem_use = 0
for iIdx in range(9):
process = psutil.Process()
before_mem = process.memory_info().rss
tmpresult = func(*args, **kwargs)
after_mem = process.memory_info().rss
mem_use = abs(after_mem - before_mem)
gc.collect()
if mem_use > max_mem_use:
max_mem_use = mem_use
result = {'mem_use':max_mem_use, 'result':tmpresult}
return result
def get_executiontime_memoryusage(func, *args, **kwargs):
process = psutil.Process()
before_mem = process.memory_info().rss
start_time = time.time()
tmpresult = func(*args, **kwargs)
end_time = time.time()
after_mem = process.memory_info().rss
exec_time = end_time-start_time
mem_use = abs(after_mem - before_mem)
gc.collect()
result = {'exec_time':exec_time, 'mem_use':mem_use, 'result':tmpresult}
return result
"""
get_executiontime_memoryusage_ext:通过多次计算,取最大值胡方式获取较为稳定的用时和内存用量
"""
def get_executiontime_memoryusage_ext(func, *args, **kwargs):
sum_exec_time, max_mem_use = 0, 0
for iIdx in range(9):
process = psutil.Process()
before_mem = process.memory_info().rss
start_time = time.time()
tmpresult = func(*args, **kwargs)
end_time = time.time()
after_mem = process.memory_info().rss
exec_time = end_time-start_time
mem_use = abs(after_mem - before_mem)
gc.collect()
sum_exec_time += exec_time
if mem_use > max_mem_use:
max_mem_use = mem_use
exec_time = sum_exec_time / 9
result = {'exec_time':exec_time, 'mem_use':max_mem_use, 'result':tmpresult}
return result
"""
getTimeStr:调用函数,获取用时信息, 单位毫秒(ms)
"""
def getTimeStr(func, *args, **kwargs):
result = get_execution_time(func, *args, **kwargs)
result['msg'] = f'函数 {func.__name__} 的运行时间为 {result["exec_time"]*1000:.6f} ms'
return result
#
"""
getMemoryStr:调用函数,获取内存信息, 单位KB
"""
def getMemoryStr(func, *args, **kwargs):
result = get_memory_usage(func, *args, **kwargs)
result['msg'] = f'函数 {func.__name__} 的内存使用量为 {result["mem_use"]/1024:.2f} KB'
return result
"""
getMemoryStrExt:调用函数9次,获取最大内存信息, 单位KB
"""
def getMemoryStrExt(func, *args, **kwargs):
result = get_memory_usage_ext(func, *args, **kwargs)
result['msg'] = f'函数 {func.__name__} 的内存使用量为 {result["mem_use"]/1024:.2f} KB'
return result
"""
getTimeMemoryStr:调用函数,获取用时和内存信息, 单位毫秒(ms)、KB
"""
def getTimeMemoryStr(func, *args, **kwargs):
result = get_executiontime_memoryusage(func, *args, **kwargs)
result['msg'] = f'函数 {func.__name__} 的运行时间为 {result["exec_time"]*1000:.2f} ms;内存使用量为 {result["mem_use"]/1024:.2f} KB'
return result
"""
getTimeMemoryStrExt:调用函数9次,获取平均用时和最大内存信息, 单位毫秒(ms)、KB
"""
def getTimeMemoryStrExt(func, *args, **kwargs):
result = get_executiontime_memoryusage_ext(func, *args, **kwargs)
result['msg'] = f'函数 {func.__name__} 的运行时间为 {result["exec_time"]*1000:.2f} ms;内存使用量为 {result["mem_use"]/1024:.2f} KB'
return result
# 测试函数1
def test1(icount = 10):
a = [i for i in range(icount ** 6)]
b = [j for j in range(icount ** 7)]
return sum([x + y for x, y in zip(a, b)])
# 测试函数2
def test2(icount, jcount):
a = [i for i in range(icount ** 7)]
b = [j for j in range(jcount ** 7)]
return sum([x + y for x, y in zip(a, b)])
if __name__ == '__main__':
print('CheckFuncPerf.py')
# 以下是调用示例
print(getTimeStr(test1))
print(getTimeStr(test2, 8, 9)['msg'])
print(getMemoryStr(test2, 8, 9)['msg'])
print(getMemoryStrExt(test1, 8)['msg'])
print(getTimeMemoryStr(test1, 8)['msg'])
print(getTimeMemoryStrExt(test2, 8, 9)['msg'])
result = getTimeMemoryStr(test1, 8)
print(result['msg'], '执行结果 = {}'.format(result['result']))
result = getTimeMemoryStr(test2, 8, 9)
print(result['msg'], '执行结果 = {}'.format(result['result']))
Python算法题源代码-LeetCode(力扣)-搜索旋转排序数组
需积分: 0 70 浏览量
更新于2024-03-12
收藏 3KB ZIP 举报
力扣热题Python源代码
题目33. 搜索旋转排序数组
整数数组 nums 按升序排列,数组中的值 互不相同 。
在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。
给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 。
你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。
示例 1:
输入:nums = [4,5,6,7,0,1,2], target = 0
输出:4
示例 2:
输入:nums = [4,5,6,7,0,1,2], target = 3
输出:-1


长孤秋落
- 粉丝: 2217
最新资源
- Python数据可视化中的Matplotlib进阶技巧.doc
- Python爬虫中的代理池构建与维护方法.doc
- Python爬虫从入门到突破反爬策略全流程.doc
- Python数据清洗的自动化方法与工具.doc
- Python正则表达式的高级用法与实例.doc
- Python异步编程与协程的进阶实践.doc
- Redis持久化机制的原理与数据恢复方法.doc
- Redis在高并发秒杀系统中的应用优化.doc
- TensorFlow与PyTorch在图像识别中的对比.doc
- Vue与React在大型项目中的架构对比分析.doc
- WebAssembly在前端游戏开发中的应用.doc
- WebAssembly在复杂计算中的应用探索.doc
- Web安全防护的多层架构与实践方法.doc
- Web性能优化的关键指标与监控方法.doc
- Web安全漏洞的自动化检测与修复方案.doc
- 大规模数据库备份与恢复的自动化实现.doc