- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在参加常见的“MaxProfit”编程挑战。它基本上是这样的:
Given a zero-indexed array A consisting of N integers containing dailyprices of a stock share for a period of N consecutive days, returnsthe maximum possible profit from one transaction during this period.
我对我提出的这个 PHP 算法非常满意,它避免了天真的暴力尝试:
public function maxProfit($prices)
{
$maxProfit = 0;
$key = 0;
$n = count($prices);
while ($key < $n - 1) {
$buyPrice = $prices[$key];
$maxFuturePrice = max( array_slice($prices, $key+1) );
$profit = $maxFuturePrice - $buyPrice;
if ($profit > $maxProfit) $maxProfit = $profit;
$key++;
}
return $maxProfit;
}
但是,在测试我的解决方案后,它似乎在性能方面表现不佳,甚至可能在 O(n2) 时间内。
我围绕这个主题做了一些阅读,发现了一个非常相似的 python 解决方案。 Python 有一些非常方便的数组功能,允许使用 a[s : e]
语法拆分数组,这与我在 PHP 中使用 array_slice
函数不同。我认为这一定是瓶颈,所以我做了一些测试:
PHP array_slice()
$n = 10000;
$a = range(0,$n);
$start = microtime(1);
foreach ($a as $key => $elem) {
$subArray = array_slice($a, $key);
}
$end = microtime(1);
echo sprintf("Time taken: %sms", round(1000 * ($end - $start), 4)) . PHP_EOL;
结果:
$ php phpSlice.php
Time taken: 4473.9199ms
Time taken: 4474.633ms
Time taken: 4499.434ms
Python a[s : e]
import time
n = 10000
a = range(0, n)
start = time.time()
for key, elem in enumerate(a):
subArray = a[key : ]
end = time.time()
print "Time taken: {0}ms".format(round(1000 * (end - start), 4))
结果:
$ python pySlice.py
Time taken: 213.202ms
Time taken: 212.198ms
Time taken: 215.7381ms
Time taken: 213.8121ms
array_slice()
效率比 Python 低 20 倍左右?maxProfit
算法在 O(N) 时间内运行? 编辑 我意识到我上面的实现实际上不是 O(N),但我的问题仍然是关于切片数组的效率。最佳答案
max
这样的东西在每个循环迭代中超过数组的一半。关于PHP array_slice 与 Python 的拆分数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30529424/
我有一个 PHP 数组,里面有 50 个项目。然后我使用 array_slice 提取 12 个项目: $extractItems = array_slice($rows,0,12); 然后我使用 $
由于我不会在这里讨论的原因,我不得不解析一个大的文件目录(我们说的是 100.000 < x < 1.000.000+)并将文件列表作为数组返回。 我已经在缓存文件列表了,问题是array_slice
我是 php 的新手。我想在一个大数组上做多个数组切片。现在这是我的代码的一部分: $row1 = array_slice($filtered, 0, 22); $row2 = array_slice
更新 我是 PHP 开发新手:我在 PHP 网站上查找了一个函数 - array_slice。我阅读并查看了示例,但我不明白。谁能用清楚的话给我解释一下? 我认为它的工作原理如下? $example
我有一个以索引作为时间戳的数组。我试过 array_slice获取某个时间范围内的所有值,但它似乎不起作用。 $data = array_slice(["1549440811" => 1, "1549
我只想做一件事,我有一个包含产品的数组,可以这样说(以简单的方式): $products = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j
我正在尝试删除对象中的前两项。例如,如果我想从数组中删除前两项,我会使用 array_slice($arrayName, 2)。 我已经在我的对象上试过了(嘿,为什么不呢?我知道它在技术上不是一个数组
我无法准确理解 array_splice 和 array_slice 的作用。据我所知,array_splice 应该在取出某些元素后返回一个数组,而 array_slice 应该检索数组的一部分。
一些背景 我正在参加常见的“MaxProfit”编程挑战。它基本上是这样的: Given a zero-indexed array A consisting of N integers contain
Closed. This question needs debugging details。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。 去年关闭。 Im
我有一个搜索查询,它从搜索表中查找匹配值并返回与关键字匹配的所有可能条目。我没有编写搜索,它是已经存在的东西,我们正在将其移植到另一个框架。无论如何,这不是重点。 我想要的是使用 LIMIT 执行 M
如何在 PHP 中使用 array_splice/array_slice 删除特定项目? 例如:数组('a','b','c');如何删除'b'?所以数组仍然是:数组('a','c'); 谢谢 最佳答案
我有一个关于 ArrayObject 的问题。我想在 ArrayObject 类中使用 array_slice 但我不能。有没有办法做到这一点,而不需要为实现 ArrayObject 的类编写“切片”
我想在我的 PHP 脚本中使用 array_slice 和 scandir。 正常使用: ! [1] => . [2] => .. ) 一般来说,这对于所有以 . 之前的字符开头的文
我是一名优秀的程序员,十分优秀!