几个月前,我参加了纽约一家对冲基金公司的面试,不幸的是,我没有得到数据/软件工程师的实习机会。(他们还要求解决方案使用Python。)
我在第一个面试问题上搞砸了...
123 - 3 times
234 - 3 times
345 - 2 times
000-->999
现在我在考虑,我认为不可能想出一个常数时间的算法。是吗?
你轻松地离开了,你可能不想为一个量化员不懂基本算法的对冲基金工作:-)
在O(1)
中,如果您需要至少访问每个元素一次,则无法处理任意大小的数据结构。在本例中,O(n)
是最好的选择,其中n
是字符串的长度。
不过,顺便说一句,对于固定的输入大小,名义上的O(n)
算法将是O(1)
,所以从技术上讲,它们在这里可能是正确的。然而,人们通常不是这样使用复杂性分析的。
其次,通过提供Pythonic代码来展示您的精英技能,例如:
inpStr = '123412345123456'
# O(1) array creation.
freq = [0] * 1000
# O(n) string processing.
for val in [int(inpStr[pos:pos+3]) for pos in range(len(inpStr) - 2)]:
freq[val] += 1
# O(1) output of relevant array values.
print ([(num, freq[num]) for num in range(1000) if freq[num] > 1])
这一产出:
[(123, 3), (234, 3), (345, 2)]
当然,您可以将输出格式修改为您想要的任何格式。
当然,由于GIL,不在一个Python解释器中,但是您可以将字符串拆分为类似的部分(vv
指示的重叠是允许正确处理边界区域所必需的):
vv
123412 vv
123451
5123456
您可以将这些分解出来,以分离员工,然后将结果组合在一起。
输入的拆分和输出的组合可能会用小字符串(甚至可能是百万位数的字符串)淹没任何保存,但对于更大的数据集,这很可能会有所不同。当然,我通常的口头禅“衡量,不要猜测”也适用于这里。
例如,下面的C代码运行在与早期Python代码相同的硬件上,在0.6秒内处理1亿个数字,与Python代码处理100万个数字的时间大致相同。换句话说,快得多:
#include <stdio.h>
#include <string.h>
int main(void) {
static char inpStr[100000000+1];
static int freq[1000];
// Set up test data.
memset(inpStr, '1', sizeof(inpStr));
inpStr[sizeof(inpStr)-1] = '\0';
// Need at least three digits to do anything useful.
if (strlen(inpStr) <= 2) return 0;
// Get initial feed from first two digits, process others.
int val = (inpStr[0] - '0') * 10 + inpStr[1] - '0';
char *inpPtr = &(inpStr[2]);
while (*inpPtr != '\0') {
// Remove hundreds, add next digit as units, adjust table.
val = (val % 100) * 10 + *inpPtr++ - '0';
freq[val]++;
}
// Output (relevant part of) table.
for (int i = 0; i < 1000; ++i)
if (freq[i] > 1)
printf("%3d -> %d\n", i, freq[i]);
return 0;
}
给定一个字符串数组,单词,返回该数组,其中包含所有偶数长度的字符串,并将其替换为空字符串。 如何返回字符串?我需要返回字符串以便为偶数打印空白,但现在我只是返回一个计数。这是我的代码,我认为一切都是正确的,我只是不知道如何返回它?
本文向大家介绍返回一个数组,该数组填充有JavaScript中数字的所有数字的位置值,包括了返回一个数组,该数组填充有JavaScript中数字的所有数字的位置值的使用技巧和注意事项,需要的朋友参考一下 我们需要编写一个函数,该函数需要一个正整数,并返回一个数组,该数组填充有该数字的所有数字的位置值。 例如- 让我们为该函数编写代码。 这个问题非常适合递归方法,因为我们将迭代数字的每个数字。因此,
问题 你想由数组创建一个字符串。 解决方案 使用 JavaScript 的数组方法 toString(): ["one", "two", "three"].toString() # => 'one,two,three' 讨论 toString() 是一个标准的 JavaScript 方法。不要忘记圆括号。
这个程序对两者都使用get/set方法,但我就是不知道怎么做! 感谢有帮助的用户推荐字符串。valueOf,我现在有这个 public int getSeatNumber(){ <代码>字符串输出=“”seatLetter字符串。valueOf(座位号) <代码>返回输出;} 但仍有相同的错误,“类型不兼容,字符串无法转换为int”。 这是完整的对象,尽管并不是所有变量都已设置,因为这是可循环使用
将数组的所有元素拼接成一个字符串并返回此字符串。 使用分隔符和结束分隔符。 使用 Array.reduce() 将元素拼接成一个字符串。 省略第二个参数 separator ,则默认使用分隔符','。 省略第三个参数 end ,默认使用与separator相同的值。 const join = (arr, separator = ',', end = separator) => arr.redu
我想从中得到一个子字符串。 我想要的子字符串是一个数字字符序列。 输入 通常可以是任何字符串,但它们都有一个共同点: 有一个部分以KD-开头 并以数字结尾 数字之后的所有内容都将消失。 在上面的示例中,这个数字将分别为、、。但它可以是任何数字 现在我有一个子字符串,它包含KD之后的所有数字字符--但我希望只有字符串的0815ish部分。 我目前所拥有的 结果是,但我只想要(它可以是任何长度,但不可