python代码评测结果tle_TLE计算列表中指定范围内的元素数 - python
有一个未排序的列表a和一个范围列表,例如ranges = [(10, 20), (30, 50), (15, 35) ...]。 a中的最大值是uint64_t。目标是计算每个范围的元素数量。正常的解决方案非常直观,只需计算范围内的元素并打印结果即可。但问题是来自在线法官。我厌倦了保密的解决方案,但对于每个解决方案,OJ都给出了超过时限的限制。
a的最大长度为10,000,000,ranges的最大长度为1,000,000。
测试列表a具有1000万个随机数,而ranges具有100万对范围:
import numpy as np
a = list(np.random.randint(low=1, high=0x7fffffffffffffff, size=10_000_000))
ranges = []
for _ in range(1_000_000):
x, y = np.random.randint(low=1, high=0x7fffffffffffffff, size=2)
ranges.append((x, y) if x < y else (y, x))
第一个解决方案是:
import bisect
a.sort()
low_d = {}
up_d = {}
def count(r):
low, up = r
if low not in low_d:
l = bisect.bisect_left(a, low)
low_d[low] = l
else:
l = low_d[low]
if up not in up_d:
u = bisect.bisect_right(a, up, lo=l)
up_d[up] = u
else:
u = up_d[up]
return u - l
result = [*map(count, ranges)]
缺点很明显,当sort()很大时,a会非常耗时。
原始的第二个解决方案比上述解决方案要慢得多。
弃。
两种解决方案均导致TLE错误。我使用的OJ就像一个黑盒子,我不知道它用来测试程序的测试示例。
由于该程序在OJ上运行,因此不允许使用numpy。
有什么方法可以优化性能?
参考方案
此C ++代码在此硬件上以1.9s运行,而-O2与我最好的Python代码13.2s相比运行(与Python中的基准测试相比,这是一个较慢的硬件)。
可能的改进:
上等分应在下等分之上搜索
使用预先计算的等分值,例如python代码
从Unisort: an Algorithm to Sort Uniformly Distributed Numbers in O(n) Time. R.T. Ionescu 2013实现Unisort算法
码:
#include
#include
#include
#include
#include
#include
#include
#include
int tdiff(std::chrono::time_point<:chrono::system_clock> start, std::chrono::time_point<:chrono::system_clock> _end) {
int result;
result = (std::chrono::duration_cast<:chrono::milliseconds>(_end - start)).count();
return result;
}
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution dis(1, 0x7fffffffffffffff);
#define A_SIZE 10000000
#define R_SIZE 1000000
std::vector a(A_SIZE);
int a_size = A_SIZE;
int r_size = R_SIZE;
for (int i=0; i
a[i] = dis(gen);
}
std::vector<:vector>> ranges1(R_SIZE, std::vector(2));
int64_t x,y;
for (int i=0; i
x = dis(gen);
y = dis(gen);
if (x < y){
ranges1[i] = {x,y};
}else{
ranges1[i] = {y,x};
}
}
std::chrono::time_point<:chrono::system_clock> start, _end;
start = std::chrono::system_clock::now();
std::sort(a.begin(), a.end());
std::vector counts(A_SIZE);
std::vector::iterator l;
std::vector::iterator u;
for (int i=0; i
l = std::lower_bound(a.begin(),a.end(),ranges1[i][0]);
u = std::upper_bound(a.begin(),a.end(),ranges1[i][1]);
counts[i] = (int64_t)std::distance(l,u);
}
_end = std::chrono::system_clock::now();
std::cout << tdiff(start, _end) << "\n";
std::cout << counts[0] << "\n";
return 0;
}
Python Pandas导出数据 - python
我正在使用python pandas处理一些数据。我已使用以下代码将数据导出到excel文件。writer = pd.ExcelWriter('Data.xlsx'); wrong_data.to_excel(writer,"Names which are wrong", index = False); writer.…Python 3运算符>>打印到文件 - python
我有以下Python代码编写项目的依赖文件。它可以在Python 2.x上正常工作,但是在使用Python 3进行测试时会报告错误。depend = None if not nmake: depend = open(".depend", "a") dependmak = open(".depend.mak…Python:对于长时间运行的进程,通过还是休眠? - python
我正在编写一个队列处理应用程序,该应用程序使用线程等待和响应要发送到该应用程序的队列消息。对于应用程序的主要部分,只需要保持活动状态即可。对于像这样的代码示例:而True: 通过要么而True: time.sleep(1)哪一个对系统的影响最小?除了保持python应用运行外,什么都不做的首选方式是什么? 参考方案 我可以想象time.sleep()会减少系…如何使用BeautifulSoup在
中捕获特定的 - python
尝试从nyc Wiki页面中的高中列表中获取所有高中名称。我已经写了足够多的脚本,可以让我获取包含在高中,学业和入学条件列表的表的
标记中的所有信息-但是我如何才能缩小到我认为的范围内在td[0]内休息(会弹出KeyError)-只是学校的名称?到目前为止我写的代码:from bs4 import BeautifulSoup from ur…Python NotImplemented常数 - python
浏览decimal.py,它在许多特殊方法中使用NotImplemented。例如class A(object): def __lt__(self, a): return NotImplemented def __add__(self, a): return NotImplemented Python docs say: 未实现 可以通过“丰富比较”返回的特…
python代码评测结果tle_TLE计算列表中指定范围内的元素数 - python相关推荐
- python中偶数怎么表示_Python程序可计算列表中的偶数和奇数
在本文中,我们将学习下面给出的问题陈述的解决方案. 问题陈述-我们得到一个列表,我们需要计算列表中的偶数和奇数. 共有三种方法,如下 - 方法1:使用蛮力方法 示例list1 = [21,3,4,6, ...
- python返回索引值_python 返回列表中某个值的索引方法
python 返回列表中某个值的索引方法 如下所示: list = [5,6,7,9,1,4,3,2,10] list.index(9) out:3 同时可以返回列表中最大值的索引list.index ...
- Python代码 | 文本操作 统计英文文本中,每个字母出现的次数
Python代码 | 文本操作 统计英文文本中,每个字母出现的次数 # -*- coding: utf-8 -*- # 使用oepn获取文件路径 # path=open("arrogant. ...
- python中列表用某个数字出现的次数_Python实现统计给定列表中指定数字出现次数的方法...
本文实例讲述了Python实现统计给定列表中指定数字出现次数的方法.分享给大家供大家参考,具体如下: 直接看实现: #!usr/bin/env python #encoding:utf-8 ''''' ...
- Python | 程序从列表中删除范围内的所有元素
Given a list and we have to remove elements in a range from the list in Python. 给定一个列表,我们必须从Python中的 ...
- python两两组合_python – 一个列表中的两个组合列表
我是一个Python初学者.我想从一个列表中获取两个组合列表. 例如,我有一个列表: c = [1, 2, 3, 4] 我想使用每四个项目来获得每个可能的组合来填充两个列表.将会有((2 ^ 4)/ ...
- Python列表(获取列表中指定元素的索引、获取列表中的多个元素、判断指定元素是否在列表中存在、列表元素的遍历、列表元素的增加操作、 列表元素的删除操作、列表元素的修改操作、列表元素的排序操作)
1.获取列表中指定元素的索引 eg1:未指定索引范围查找索引 zyr=['憨憨','憨宝'] print(zyr.index('憨宝')) print(zyr[1]) eg2:在指定索引范围内查找元素 ...
- java list 截取部分数据_Java List.subList()方法:获取列表中指定范围的子列表
集合类中的 List.subList() 方法用于获取列表中指定范围的子列表,该列表支持原列表所支持的所有可选操作.返回列表中指定范围的子列表. 语法: subList(int fromIndex,i ...
- list -- set方法——替换列表中指定位置的元素
set方法用于替换列表中指定位置的元素. 返回值:索引位置替换前的元素. 参数:index用于指定要替换元素所在位置的索引. 参数:element用于指定要存储在指定位置的元素. 示例 本示例使用L ...
最新文章
- 【OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 )
- XAML或JavaFx?
- 信号与系统 chapter10 系统的初值问题与系数匹配法
- usb接口供电不足_1个USB接口变成4个?什么东西那么“牛”?请你花2分钟了解一下...
- 电脑键盘练习_用键盘打字怎样才能练得快,有什么窍门没?
- linux VPS上装FTP
- 《人月神话》读后总结
- 荣耀正式出售!30余家代理商接盘自救,华为回应...
- 95-872-055-源码-CEP-Pattern API
- fisco bcos transaction交易结构 源代码位置
- html中调用javascript函数,如何在HTML中调用JavaScript函数
- 红巨星粒子插件:Red Giant Trapcode Suite 15 for Mac
- 七个习惯之三:要事第一
- PS:PS将彩色相片变成纯黑白色
- eNSP交换机配置IP
- DNS配置错误如何修复
- linux什么时候挂载根文件系统,什么时候要重新制作Linux的根文件系统?谢谢
- linux 多核cpu监控,Linux 下多核CPU知识
- fMRI之dpabi处理经验(一)
- APP android 测试用例手册