在未排序的数组中,我们必须用右边的第一个元素替换每个元素,该元素大于当前元素.如果右边的元素都不大,那么它应该替换为-1.
例:
3 1 2 5 9 4 8 should be converted to
5 2 5 9 -1 8 -1
Run Code Online (Sandbox Code Playgroud)
我可以想到一个简单的解决方案,我们用整个阵列检查每个元素,这是一个Ο(n²)解决方案.有一个更好的方法吗?
任务是使重排的阵列arr[i]变得arr[arr[i]]有O(1)额外的空间.
例:
2 1 3 5 4 0
Run Code Online (Sandbox Code Playgroud)
变为:
3 1 5 0 4 2
Run Code Online (Sandbox Code Playgroud)
我能想到一个O(n²)解决方案.这里O(n)提出了一个解决方案:
- 增加每个数组元素
arr[i]通过(arr[arr[i]] % n)*n.- 将每个元素除以
n.
但这非常有限,因为它会导致缓冲区溢出.
有人能想出一个改进吗?
我一直在寻找计算数字(整数)的平方根(整数)的最快方法.我在维基百科中遇到了这个解决方案,它找到了一个数字的平方根(如果它是一个完美的正方形)或者它最近的下方完美正方形的平方根(如果给定的数字不是一个完美的正方形:
short isqrt(short num) {
short res = 0;
short bit = 1 << 14; // The second-to-top bit is set: 1L<<30 for long
// "bit" starts at the highest power of four <= the argument.
while (bit > num)
bit >>= 2;
while (bit != 0) {
if (num >= res + bit) {
num -= res + bit;
res = (res >> 1) + bit;
}
else
res >>= 1;
bit >>= 2;
}
return res;
}
Run Code Online (Sandbox Code Playgroud)
我尝试了很多测试运行来跟踪算法,但我似乎并不理解里面的部分 …
计算x!可能非常昂贵,可能经常导致溢出.有没有办法找出是否x!如果没有计算x,你可以被y整除!
我有一个从数据库读取的多线程批处理作业,我担心不同的线程重新读取记录,因为 ItemReader 在 Spring 批处理中不是线程安全的。我浏览了SpringBatch 常见问题部分,其中指出
您可以同步 read() 方法(例如,通过将其包装在执行同步的委托程序中)。请记住,您将失去可重启性,因此最佳做法是将步骤标记为不可重启,并且为了安全(和高效),您还可以在阅读器上设置 saveState=false。
我想知道为什么在这种情况下我会失去重新启动性?可重启性与同步我的读取操作有什么关系?它总是可以再试一次,对吧?另外,这段代码是否足以同步阅读器?
public SynchronizedItemReader<T> implements ItemReader<T> {
private final ItemReader<T> delegate;
public SynchronizedItemReader(ItemReader<T> delegate) {
this.delegate = delegate;
}
public synchronized T read () {
return delegate.read();
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个很长的字符串。我想找到这个字符串的所有唯一子字符串。我尝试编写代码,其中使用集合(python)来存储所有子字符串以确保唯一性。对于许多中型和大型字符串,我得到了正确的结果,但是在非常大的字符串的情况下,我得到了 MemoryError。我用谷歌搜索了一下,发现python中的set数据结构有很大的 RAM 占用空间,也许这就是我收到 MemoryError 的原因。
这是我的代码:
a = set()
for i in range(n):
string = raw_input()
j = 1
while True:
for i in xrange(len(string)-j+1):
a.add(string[i:i+j])
if j==len(string): break
j+=1
print sorted(list(a))
Run Code Online (Sandbox Code Playgroud)
有没有办法避免大字符串的这个错误?或者有人可以建议对我的代码进行更好的修改来处理这个问题吗?
PS:我没有在 32 位和 64 位版本之间转换的选项。
algorithm ×4
arrays ×2
bit-shift ×1
large-data ×1
memory ×1
performance ×1
python ×1
spring-batch ×1
square-root ×1
string ×1