我有一个整数数组,可能会遇到数十万(或更多),按数字上升排序,因为这是它们最初堆叠的方式.
我需要能够查询数组,以>=
尽可能高效地获取其首次出现数字输入的索引.我想知道如何在不考虑它的情况下做到这一点的唯一方法就是遍历测试条件的数组直到它返回true,此时我将停止迭代.但是,这是解决这个问题的最昂贵的解决方案,我正在寻找解决它的最佳算法.
我在Objective-C中进行编码,但我将在JavaScript中举例说明,以扩大能够响应的人的观众.
// Sample set
var numbers = [1, 7, 23, 23, 23, 89, 1002, 1003];
var indexAfter100 = getIndexOfValueGreaterThan(100);
var indexAfter7 = getIndexOfValueGreaterThan(7);
// (indexAfter100 == 6) == true
// (indexAfter7 == 2) == true
Run Code Online (Sandbox Code Playgroud)
将这些数据放入数据库以执行此搜索只是最后的解决方案,因为我很想看到某种算法在内存中快速解决这个问题.
我这样做有改变的数据结构,或以专卖店为我建立的阵列,因为我的计划已经由一个推每个号码一个到这个堆栈的附加数据结构的能力,所以我只是修改的代码将它们添加到堆栈中.在索引被添加到堆栈时搜索索引是不可能的,因为搜索操作将在事后经常以不同的值重复.
现在我正在考虑"B-Tree",但说实话,我不知道如何实现一个,在我开始计算之前,我想知道是否有一个很好的算法适合这个单一用例更好?
我试图找到最有效,最优化和最快速的方法来比较CString的标准向量.有问题的字符串区分大小写.我已经尝试将==运算符用于向量容器,但这有时会返回误报.我的意思是,例如,如果一个向量包含顺序(a,b,c)中的元素而另一个向量按顺序包含它们(b,c,a),则==运算符将返回false,即使它们共享相同的数据.另一件事是它不做区分大小写的比较.
我曾想过使用这样的基本嵌套循环方法:
//Not Tested
BOOL bMatch = TRUE;
for(int i=0; i<Vec1.size();i++)
{
if(!bMatch)
break;
int nComp=0;
for(int j=0;j<Vec2.size();j++)
{
if(vec1[i].CompareNoCase(Vec2[j])==0)
{
//We have a match--check next item
break;
}
else
{
nComp++;
if(nComp == Vec2.size()-1)
{
//Reached end of vector and no match found
//Vectors don't match
bMatch=FALSE;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码没有经过测试,我不确定是否有更好的方法可以实现这种比较,而无需使用嵌套循环.
非常感谢任何建议或帮助......
我有一个函数,它创建一些随机数值结果.我知道,结果将是a(小,a - b约50)范围a,b的整数.我想创建一个执行上述函数的函数,比方说1000000次并计算每个结果出现的频率.(该函数采用随机生成器来生成结果.)问题是,我不知道如何在常量内存中执行此操作而不对范围的长度进行硬编码.我的(坏)方法是这样的:
values :: [Int]
values = doFunctionNtimes myRandom 1000000
results = map (\x ->length . filter (x==) $ values) [a..b]
Run Code Online (Sandbox Code Playgroud)
有人想做这个吗?
我想我错了解释了这个问题,对不起.我有一个函数,它取决于一个随机的gen - 给出一些小的int值.为了统计,我想知道结果出现的频率.因为我想制作统计数据让我们说1000000次尝试,我需要在尝试次数上保持不变的记忆.
假设我想执行此查询:
(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION ALL
(SELECT a FROM t2 WHERE a=11 AND B=2)
UNION ALL
(SELECT a FROM t3 WHERE a=12 AND B=3)
ORDER BY a LIMIT 1000;
Run Code Online (Sandbox Code Playgroud)
如果"t1"中有550个结果,"t2"中有450个结果,那么MySQL是否足够智能以跳过"t3"?
我在看MySQL文档(http://dev.mysql.com/doc/refman/5.1/en/union.html)但似乎无法找到答案.
我正在使用原始资源创建文件夹res/raw/myfile,然后使用代码InputStream is = Resources.getSystem().openRawResource(R.raw.myfile);
此代码抛出资源未找到异常,并在日志中显示"资源不包含资源编号0x7f04000的包"
我上面使用的代码是我猜的正确代码.我见过的所有其他例子都不可能(2.1 sdk),因为它们可能是旧的例子.
我已经清理并建造并使用了新鲜的avd.我的R.java看起来像这个public static final class raw {public static final int myfile = 0x7f040000; }
我正在Visual Studio 2010中设计一个功能区,我遇到了一个问题,我真的没有.
正如标题所说,如何更改组的大小?没有可视方式来更改默认大小,而是在使用时似乎自动调整大小.
我的主要问题是我想将标记为"test"的按钮放在编辑框的右侧,但它们会一直保持在彼此之上.
谢谢!
典型的SWT示例代码如下所示:
final Display display = Display.getDefault();
final Shell shell = createMyShell(display);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
Run Code Online (Sandbox Code Playgroud)
Display
和之间有什么区别Shell
?
如果必须显示多个窗口,每个窗口是否需要一个自己的循环?
我正在查看switch语句的汇编语言代码.
我理解代码如何工作以及案例是什么.我的问题是我如何决定案件名称?
下面是汇编语言代码,我将对其进行解释.我基本上只需要使用跳转表并填写案例名称.
1 8048420: push %ebp
2 8048421: mov %esp, $ebp
3 8048423: mov 0x8(%ebp), %eax // x
4 8048426: mov 0xc(%ebp), %edx // n
5 8048429: sub $0x32, %edx // so least value of case is 32
6 804842c: cmp $0x5, %edx // max value is 37
7 804842f: ja 8048448 <switch+0x28> // if >37, go to default
8 8048431: jmp *0x80485d0(, %edx, 4) //THIS RIGHT HERE ?
9 8048438: shl $0x2, %eax // CASE A
10 804843b: …
Run Code Online (Sandbox Code Playgroud) 这是一个采访问题:"你给了一个字符串,你想把它分成尽可能少的字符串,这样每个字符串都是一个回文".(我猜一个字符串被认为是回文,即"abc"分为"a","b","c".)
你会怎么回答?