我有一个数组,我想分成更小的n个数组,并对每个数组执行操作.我目前的做法是
用Java中的ArrayLists实现(任何伪代码都可以)
for (int i = 1; i <= Math.floor((A.size() / n)); i++) {
ArrayList temp = subArray(A, ((i * n) - n),
(i * n) - 1);
// do stuff with temp
}
private ArrayList<Comparable> subArray(ArrayList A, int start,
int end) {
ArrayList toReturn = new ArrayList();
for (int i = start; i <= end; i++) {
toReturn.add(A.get(i));
}
return toReturn;
}
Run Code Online (Sandbox Code Playgroud)
其中A是列表,n是所需列表的大小
我相信这种方式在处理相当大的列表(大小高达100万)时花费了太多时间,所以我试图弄清楚什么会更有效率.
使用按位运算符,我想加法和减法,我如何检查有符号整数是否为正(特别是,不是负数而不是零)?我相信这个问题的答案非常简单,但它并没有找到我.
我正在尝试理解维基百科上的深度限制搜索算法,我试图找出扩展节点的确切含义.我试图寻找答案,但我得到的是更多的算法,它们表明必须扩展节点.
具体来说,stack := expand (node)关于整个功能的说法是什么?
DLS(node, goal, depth)
{
if (node == goal)
return node;
push_stack(node);
while (stack is not empty)
{
if (depth > 0)
{
stack := expand (node)
node = stack.pop();
DLS(node, goal, depth-1);
}
else
// no operation
}
}
Run Code Online (Sandbox Code Playgroud) 我正在读指令
imul 0xffffffd4(%ebp, %ebx, 4), %eax
Run Code Online (Sandbox Code Playgroud)
而且我对它正在做的事情感到困惑.我明白imul会增加,但我无法弄清楚语法.
我有一个基本函数,它检查列表是否重复,如果找到则返回true,否则返回false.
# let rec check_dup l = match l with
[] -> false
| (h::t) ->
let x = (List.filter h t) in
if (x == []) then
check_dup t
else
true
;;
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试使用此代码时,我得到了错误
Characters 92-93:
let x = (List.filter h t) in
^
Error: This expression has type ('a -> bool) list
but an expression was expected of type 'a list
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么会发生这种情况,a-> bool列表类型来自哪里?
首先,我道歉,如果这是一个混乱或倒退的方式来实现我想要完成的事情,但我是"Ocaml风格"的新手.
我想获取列表的最后一个元素,并将其移动到列表的前面,将所有元素向上移动一个.
例如:有 [1;2;3;4;5] -> [5;1;2;3;4]
我知道Ocaml中的列表基本上是链表,所以我计划递归遍历列表,找到最后一个元素,然后让该元素的尾部/剩余列表指向列表的头部.
我主要关注的是如何打破从倒数第二个元素到最后一个元素的链接.在上面的例子中,我希望得到5指向1,但4指向不再指向5.
我如何实现这一点,是否有一种更简单的方式来看待我完全失踪?
我正在尝试将格式为"0000"的时间码与"2459"匹配.我怎么能在一个特定的范围内匹配的数字,这样我就可以专门匹配0和59,并没有什么大或小介于0至24的所有数值之间的所有数字?
我知道如何匹配每个数字,但这不会做我想要的,例如
/[0-2][0-4]/
Run Code Online (Sandbox Code Playgroud)
将捕获数字0-4,10-14和20-24,遗漏中间的数字.所以我想捕获所有包含多个数字.
我试图确定是否可以计算两个32位整数的总和而不溢出,同时仅使用某些按位运算符和其他运算符.因此,如果可以在不溢出的情况下添加整数x和y,则以下代码应返回1,否则返回0.
(((((x >> 31) + (y >> 31)) & 2) >> 1))
Run Code Online (Sandbox Code Playgroud)
但是,它应该为1时返回0,反之亦然.当我使用逻辑NOT(!)运算符,或按位XOR(^)与0x1时,它不能解决问题.
!(((((x >> 31) + (y >> 31)) & 2) >> 1))
(((((x >> 31) + (y >> 31)) & 2) >> 1) ^ 0x1)
Run Code Online (Sandbox Code Playgroud)
^这些不起作用.
提前致谢.