小编Aka*_*uja的帖子

快速矩阵指数

有没有比简单的分治算法更快的矩阵求幂方法来计算M ^ n(其中M是矩阵,n是整数).

algorithm

19
推荐指数
2
解决办法
2万
查看次数

查找范围内的最接近数字

我想到了一个问题如下:

我们有一个大小为n的整数数组A,我们有测试用例t,在每个测试用例中我们给出一个数字m和一个范围[s,e],即我们给出s和e,我们必须找到最接近的该数组范围内的m数(A [s] -A [e]).

您可以假设索引的数组从1到n.

例如:

  A = {5, 12, 9, 18, 19}
  m = 13
  s = 4 and e = 5
Run Code Online (Sandbox Code Playgroud)

所以答案应该是18.

约束:

n<=10^5
t<=n
Run Code Online (Sandbox Code Playgroud)

我能想到的只是针对每个测试用例的O(n)解决方案,我认为存在更好的解决方案.

algorithm complexity-theory

13
推荐指数
1
解决办法
1259
查看次数

如何匹配除空格和新线之外的任何东西?

我有一个字符串,我只想匹配任何字符的字符串,除了空格和新行.什么必须是正则表达式?

我知道除了空格之外的任何东西的正则表达式,即[^ ]+除了新行之外的任何东西的正则表达式[^\n]+(我在Windows上).我无法想象如何将它们聚集在一起.

python regex

12
推荐指数
3
解决办法
1万
查看次数

计算范围内的反转

我参加了一个编程竞赛,我无法解决问题,问题是:

给定n个整数的数组A,我需要计算给定范围内的反转次数.提供一个整数m,它表示范围的数量,然后是m行,在每一行中给出两个整数li和ri.

我们必须仅计算指定范围内的反转,即从li到ri(0基于索引).

如果A[i]>A[j]和,则两个元素A [i]和A [j]加入反转i<j.

例如: A=[3 2 1 4]

反转是:

(2, 1), (3, 1), (3, 2) i.e. total number of inversions are 3.
Run Code Online (Sandbox Code Playgroud)

输入:

3 2 1 4    //Array A 
3         // m - no. of ranges
1 2      // range
2 3
0 3
Run Code Online (Sandbox Code Playgroud)

输出:

1
0
3
Run Code Online (Sandbox Code Playgroud)

约束:

n<=2*10^4
m<=2*10^4
A[i]<=10^9
Run Code Online (Sandbox Code Playgroud)

我知道在整个数组上计算O(nlogn)中的反转计数(例如BIT或合并排序)的方法,如果我在这里对每个范围应用相同的复杂度将是O(mnlogn),那肯定是不可接受的,因为时间限制是1第二.

algorithm data-structures

10
推荐指数
1
解决办法
1847
查看次数

查找可被给定数字整除的数组元素的最大总和

这是一个编程问题.

问题如下:

将给出一组数字以及我们必须除以的数字k.我们必须从该数组中选择元素,使得这些元素的总和可以被k整除.这些元素的总和应尽可能大.

输入:

在第一行n上,表示元素的数量.

在下一行,给出了n个数字.

在下一行,我们必须划分k.

输出:

通过从该数组st sum中选择元素,尽可能最大的和可被k整除.

样本输入:

5 
1 6 2 9 5
8
Run Code Online (Sandbox Code Playgroud)

样本输出:

16
Run Code Online (Sandbox Code Playgroud)

注意16可以通过多个数字组合获得,但我们这里只关注最大总和.

我建议的解决方案:

我遍历数组并在给定输入数组的数组b中维护累积和,如:

b=[1 7 9 18 23]
Run Code Online (Sandbox Code Playgroud)

并将数组中的数字mod乘以k并存储到

c=[1 7 1 2 7]
Run Code Online (Sandbox Code Playgroud)

现在数字在c中具有相同的值,即索引0和索引2; 索引1和索引4.现在我已经得到了所有解决方案,答案就是

max(b[2]-b[0],b[4]-b[1])
Run Code Online (Sandbox Code Playgroud)

并且在一种情况下,三个索引在c中具有相同的值,即在其中的情况下

c=[1 2 3 1 1 2]
Run Code Online (Sandbox Code Playgroud)

答案是

max(b[4]-b[0],b[5]-b[1])
Run Code Online (Sandbox Code Playgroud)

基本上减去最右边出现的那个数字的最左边的出现.

我的解决方案只有在有连续元素时才有效.元素之和可以被k整除.期待对正确解决方案的描述

algorithm dynamic-programming

9
推荐指数
1
解决办法
7019
查看次数

如何在python中从布尔数组转换为int数组

我有一个Numpy二维数组,其中一列有布尔值,即True/ False.我想分别将它转换为整数1,0我该怎么办呢?

data[0::,2]是布尔,我试过

data[0::,2]=int(data[0::,2])
Run Code Online (Sandbox Code Playgroud)

,但它给了我错误:

TypeError: only length-1 arrays can be converted to Python scalars

我的前5行数组是:

[['0', '3', 'True', '22', '1', '0', '7.25', '0'],
 ['1', '1', 'False', '38', '1', '0', '71.2833', '1'],
 ['1', '3', 'False', '26', '0', '0', '7.925', '0'],
 ['1', '1', 'False', '35', '1', '0', '53.1', '0'],
 ['0', '3', 'True', '35', '0', '0', '8.05', '0']]
Run Code Online (Sandbox Code Playgroud)

python numpy

9
推荐指数
2
解决办法
2万
查看次数

信号量wait()和signal()

我正在进行流程同步,并且在理解信号量方面面临困难.所以这是我的疑问:

消息来源说

"信号量S是一个整数变量,可通过标准原子操作访问,即wait()和signal().

它还提供了wait()的基本定义

wait(Semaphore S)
{
   while S<=0
     ; //no operation
   S--;
}
Run Code Online (Sandbox Code Playgroud)

signal()的定义

signal(S)
{
   S++;
}
Run Code Online (Sandbox Code Playgroud)

设信号的初始值为1,并说有两个并发进程P0和P1不应同时执行其临界区的操作.

现在说P0处于其关键部分,因此信号量S必须具有值0,现在说P1想要进入其临界区以便执行wait(),并且在wait()中它连续循环,现在从循环中退出信号量值必须递增,但它可能是不可能的,因为根据源,wait()是原子操作并且不能被中断,因此进程P0不能在单个处理器系统中调用signal().

我想知道,到目前为止我的理解是否正确.如果正确,那么当进程P1在循环中被攻击时,进程P0如何调用signal()?

synchronization operating-system process

8
推荐指数
2
解决办法
6万
查看次数

CLOCKS_PER_SEC在不同操作系统中的行为

我正在运行一个cpp代码,但有一件事我注意到在Windows 7上,C++代码中的CLOCKS_PER_SEC给出1000而在linux fedora 16上它给出了1000000.有人可以证明这种行为吗?

c++ linux windows-7 fedora16

6
推荐指数
1
解决办法
7875
查看次数

音乐播放器流程

我正在读一本书,上面写着一个单核并且没有超线程的处理器一次只能处理一个进程,所以当我们在PC上执行这么多操作以及一些后台进程总是存在时就会产生疑问为什么音乐播放器不会在两者之间停留.我知道CPU速度非常快但是音乐播放器通常会持续播放音乐而不会有任何小的中断(可观察到).任何人都可以澄清这种行为吗?

operating-system processor

6
推荐指数
1
解决办法
641
查看次数

范围联合的长度

我需要在一维坐标系中找到范围联合的长度.我有很多范围的形式[a_i,b_i],我需要找到这些范围的并集长度.范围可以动态添加或删除,并且可以在任何状态下查询范围并集的长度.

例如:范围是:

[0-4]
[3-6]
[8-10]
Run Code Online (Sandbox Code Playgroud)

输出应为8.

是否有任何合适的数据结构用于以下复杂性的上限:

Insertion - O(log N)
Deletion - O(log N)
Query - O(log N)
Run Code Online (Sandbox Code Playgroud)

algorithm data-structures

6
推荐指数
1
解决办法
724
查看次数