我正在学习OCaml,而我无法发现如何做的一件事就是获取一个数组.例如,如果我想从索引2开始提取3个元素的子数组,我必须这样做:[|array.(2); array.(3); array.(4)|].这很乏味.是否有任何功能可以轻松快速地提供数组切片?如果没有,我将如何为这种行为滚动自己的功能?
非常感谢帮助,谢谢!
我想知道是否可以在 O(n) 或更短的时间内完成这个挑战。描述如下:
青蛙跳
2 只青蛙可以从给定的 input_array 中的任何索引开始。该函数应该返回这些青蛙可以在它们之间创建的最大可能距离(两者的索引值之间的差异),让它们彼此跳得更远。
青蛙只能跳到更高值的元素或一些相同高度的元素上,它们不能跳过任何元素。
输入:[1, 5, 5, 2, 6]
输出:3。最大距离 3 是通过生成位置 3(0 索引)和左青蛙跳到索引 1 和右青蛙跳到索引 4 来创建的。
len(input_array) 介于 2 和 200 000 之间。数组中的值是介于 1 和 1 000 000 000 之间的整数。
实际上,这里的挑战似乎是找到最长的连续子序列,使其首先不增加,然后不减少(行为的变化点是开始索引)。这似乎是最高和子阵列任务的变体。
我最好的解决方案是 O(n log n) 通过迭代数组中的所有索引并携带一个max_value来检查两只青蛙可以从该迭代的索引跳多远。
这可以在 O(n) 或更少的时间复杂度内完成吗?
[解决] 谢谢大家的回复。这是一次性解决方案的 Python 实现:
def one_pass_solution(array: List[int]) -> int:
current_peak_index = 0
previous_peak_index = 0
repeat_peaks = 0
max_distance = 0
is_going_up = False
for i in range(len(array) - 1):
this_height, next_height …Run Code Online (Sandbox Code Playgroud) 试图检查子阵列中的所有项是否相同.例如,我有一个5x5板,我想知道其中一个数组是否包含所有x's:
board = [[47, 44, 71, 8, 88],
['x', 'x', 'x', 'x', 'x'],
# [83, 85, 97, 'x', 57],
[83, 85, 97, 89, 57],
[25, 31, 96, 68, 51],
[75, 70, 54, 80, 83]]
Run Code Online (Sandbox Code Playgroud)
我目前有:
def check_x
board.each do |x|
return true if x.include?('x')
end
return false
end
Run Code Online (Sandbox Code Playgroud)
但这只会检查其中一个整数是否x全部.任何建议将不胜感激.
我想将以下数组拆分为子数组,以便子数组在 1 的开始和结束时开始和结束...
a=[1,1,0,0,1,0,1,1,1]
Run Code Online (Sandbox Code Playgroud)
所以我最终将其作为一个新数组......
=> [[1,1],[1],[1,1,1]]
Run Code Online (Sandbox Code Playgroud)
有人有什么想法吗...?
我有一个这样的列表:
[1, 2, 5, 2, 7, 3, 9, 5...]
Run Code Online (Sandbox Code Playgroud)
有没有一种有效的方法可以在这里找到2个最大元素的总和:
for i in range():
for j in range():
Run Code Online (Sandbox Code Playgroud)
我发现了这个:"最大的子阵列问题"
但我还没完全明白它的作用.
我想使用 获取多维数组中的值PHP。我将键传递给函数,如果键包含值(即没有任何数组值),它将返回该值。但如果该键包含一个数组值,它将返回整个子数组。
我正在为此添加一个示例数组。
<?php
// prepare a list of array for category, subcategory etc...
$category = array(
'Account' => array(
'Show Balance' => array(
'Recharge' => 2300,
'Success' => 12000,
'Failure' => 25000,
),
'Balance History' => 'your balance is very low for last 2 years',
'Mini Statement' => 'This is your mini statement. You can have a look of your transaction details',
'Last Transaction' => 25000
),
'Deposit' => array(
'Deposit Limit' => 40000,
'Make Deposit' => …Run Code Online (Sandbox Code Playgroud) 我有这个多维数组:
Array
(
[0] => Array
(
[0] => 2012-02-26 07:15:00
)
[1] => Array
(
[0] => 2012-02-26 17:45:00
[1] => 2012-02-26 18:55:00
)
[2] => Array
(
[0] => 2012-02-26 18:55:00
[1] => 2012-02-26 17:45:00
)
[3] => Array
(
[0] => 2012-02-26 18:57:00
[1] => 2012-02-26 17:45:00
[2] => 2012-02-26 18:55:00
)
Run Code Online (Sandbox Code Playgroud)
当我计算子阵列时,我得到1,2,2,3.我怎么能在3,2,2,1中收到它?我需要获得具有最高子阵列计数的最后3个子阵列(DESC,它意味着3,2,2).我怎样才能做到这一点?
我一定是疯了。假设我有一个数组数组。我想过滤子数组并最终得到一个过滤子数组的数组。说我的过滤器是“大于 3”。所以
let nested = [[1,2],[3,4],[5,6]]
// [[],[4][5,6]]
Run Code Online (Sandbox Code Playgroud)
在一些下划线 jiggery-pokery 失败后,我尝试了常规 for 循环。
for (var i = 0; i < nested.length; i++){
for (var j = 0; j < nested[i].length; j++){
if (nested[i][j] <= 3){
(nested[i]).splice(j, 1)
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这只会从第一个子数组中删除 1。我原以为 splice 会改变底层数组,并且会更新长度以解决这个问题,但也许不会?或者也许其他的东西完全出错了。可能很明显;没有看到它。任何花哨或简单的帮助都感激地接受。
我想找出长度的连续子阵列的所有总和K
的长度给定的数组n因为k < n.例如,让给定的数组为arr[6]={1,2,3,4,5,6}和k=3,然后回答(6,9,12,15).它可以获得如下:
(1+2+3)=6,
(2+3+4)=9,
(3+4+5)=12,
(4+5+6)=15.
Run Code Online (Sandbox Code Playgroud)
我试过这个使用长度的滑动窗口k,但它的时间复杂度是O(n).任何解决方案都需要更少的时间,如O(log n).
使用.flatten是一个方便的小技巧,可以获取一个子数组并将其转换为单个数组.例如:[[1,3],2,[5,8]].flatten=> [1,3,2,5,8]
你甚至可以包括零[1,[2,nil],3].flatten将导致[1,2,nil,3].
嵌套.map方法时这种方法非常有用,但是如何解释空子数组呢?例如:[1,[2,3],[],4].flatten会返回[1,2,3,4]...但是如果我需要跟踪空子数组,可能会将结果转换为[1,2,3,0,4]或[1,2,3,nil,4]
有没有优雅的方法来做到这一点?或者我是否需要编写一些方法来迭代每个子数组并逐个检查?