- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
来自 Codefighters:
Note: Write a solution with O(n) time complexity and O(1) additional space complexity, since this is what you would be asked to do during a real interview.
Given an array a that contains only numbers in the range from 1 to a.length, find the first duplicate number for which the second occurrence has the minimal index. In other words, if there are more than 1 duplicated numbers, return the number for which the second occurrence has a smaller index than the second occurrence of the other number does. If there are no such elements, return -1.
Example
For a = [2, 3, 3, 1, 5, 2], the output should be firstDuplicate(a) = 3.
There are 2 duplicates: numbers 2 and 3. The second occurrence of 3 has a smaller index than than second occurrence of 2 does, so the answer is 3.
For a = [2, 4, 3, 5, 1], the output should be firstDuplicate(a) = -1.
这就是我想出的。它工作但在最终测试中失败,因为它运行了超过 4000 毫秒。我不知道还能做什么。有什么提高速度的想法吗?
function firstDuplicate(a) {
var test = [],
lowest = undefined;
for (var i=0; i<a.length; i++) {
if (test.indexOf(a[i]) > -1) {
lowest = lowest || i;
if (i < lowest) {
lowest = i;
}
}
else {
test.push(a[i]);
}
}
return lowest ? a[lowest] : -1;
}
这是我的第二次尝试,但在最后一次测试中仍然失败...
function firstDuplicate(a) {
var low = undefined,
last = -1;
for (var i=0; i<a.length; i++) {
last = a.lastIndexOf(a[i])
if (last > i && (low === undefined || last < low)) {
low = last;
}
}
return low !== undefined ? a[low] : -1;
}
最佳答案
需求给出了解决这个问题的线索。数组中包含的数字集必须符合以下条件:
only numbers in the range from 1 to a.length
换句话说,只有小于或等于数组长度的正数。如果数组包含十个数字,则它们都不会大于 10。
有了这种洞察力,我们就有了一种方法来跟踪我们已经看到的数字。我们可以将数字本身视为数组的索引,修改该索引处的元素(在本例中为负数),如果我们遇到相同的数字并且该索引处的元素小于零,那么我们知道我们看过了。
console.clear()
const test1 = [2, 3, 3, 1, 5, 2]
const test2 = [2, 4, 3, 5, 1]
function firstDuplicate(a) {
for (let i of a) {
let posi = Math.abs(i) - 1
if (a[posi] < 0) return posi + 1
a[posi] = a[posi] * -1
}
return -1
}
console.log(firstDuplicate(test1))
console.log(firstDuplicate(test2))
console.log(firstDuplicate([2,2]))
console.log(firstDuplicate([2,3,3]))
console.log(firstDuplicate([3,3,3]))
原始错误答案
跟踪已经看到的数字并返回之前看到的第一个数字。
console.clear()
const test1 = [2, 3, 3, 1, 5, 2]
const test2 = [2, 4, 3, 5, 1]
function firstDuplicate(a){
const seen = {}
for (let v of a){
if (seen[v]) return v
seen[v] = v
}
return -1
}
console.log(firstDuplicate(test1))
console.log(firstDuplicate(test2))
然而,正如评论中所指出的,这个答案需要 O(n) 的额外空间,而不是 O(1) 的额外空间。
关于javascript - 为 codefighters javascript firstDuplicate() 函数加速此代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44732552/
我很难用 JavaScript 解决这个问题 给你一个字符串 s,它由英文字母、标点符号、空白字符和方括号组成。保证 s 中的括号形成一个规则的括号序列。 你的任务是反转每对匹配括号中的字符串,从最里
根据问题陈述: Write a solution with O(n) time complexity and O(1) additional space complexity. Given an ar
到目前为止,我已经做到了。我坚持递归。我不知道如何前进,加入和倒退等等。 def callrecursion(s): a=s.index('(') z=len(s) - string[
给定一个整数序列作为一个数组,确定是否可以通过从数组中删除不超过一个元素来获得一个严格递增的序列。 例子 对于序列[1, 3, 2, 1],输出应该是: almostIncreasingSequenc
我在介绍中遇到了 Codefights Arcade 问题 13 中的一个问题。以下是到目前为止的问题陈述和我的代码。我对如何解决这个问题的想法是递归地向下/在嵌套序列内工作,当我到达一个序列(没有嵌
我正在 codefights.com 练习编码。这是查看他们要求的链接:link .我很难理解这些 return 语句在下面的代码中到底做了什么。 我的代码: def avoidObstacles(i
我在使用 python3 的 CodeFights 上遇到了“areSimilar”问题。 提示指出“如果可以通过交换一个数组中的最多一对元素从另一个数组中获得一个数组,则两个数组被称为相似。 给定两
根据 Codefighters: 注意:编写一个具有 O(n) 时间复杂度和 O(1) 额外空间复杂度的解决方案,因为这是您在真实面试中被要求做的事情。 给定一个仅包含从 1 到 a.length 范
我正在尝试从 CodeFights 解决以下问题。问题结束后,我用 Java 留下了答案。该代码适用于除最后一个问题之外的所有问题。报时限异常。我该怎么做才能让它运行在 3000 毫秒以下(CodeF
我日常任务的目标是计算给定数组 (int [] a) 中表示了多少组整数(从 1 到 10000、10001 到 20000 等,直到 1000000)(例如,a[ 0] =2,所以属于第1组)。 我
我目前正在研究 Code Fights Arcade 的 arrayChange 关卡。这是目标: 给你一个整数数组。在每一步中,您都可以 恰好将其元素之一增加一。找到最小数量的 从输入中获得严格递增
我无法通过最后的隐藏测试。你能告诉我我错过了什么吗?提前致谢。 语句如下:给定一个整数序列作为数组,确定是否可以通过从数组中删除不超过一个元素来获得严格递增的序列。 boolean almostInc
给定一个由单位正方形组成的矩形 (m,n) 的尺寸,输出与矩形对角线相交的单位正方形的数量 - 包括边界和顶点。 我的算法通过循环遍历所有单位正方形来解决这个问题(假设可以绘制我们的对角线从 (0,0
我在 CodeFights.com 上看到过 C++ 函数的这种语法形式: int i,j,w,myFunction(auto s, auto v) { // here, i, j,and w a
来自 Codefighters: Note: Write a solution with O(n) time complexity and O(1) additional space complexi
我正在做 codefight 的挑战:扫雷。 描述: 我的代码如下: def minesweeper(matrix): for x in range(len(matrix)):
我正在 CodeFights.com 上尝试 sumOFTwo 挑战,但不幸的是我无法完成它以查看解决方案。我所有的测试都成功了,直到第 15 次隐藏测试,它说它超过了时间限制。 挑战是 - 你有两个
所以我必须找到包含 n 位数字的最大数字。例如,如果 n=2,那么 largestNumber = 99。这就是我的答案。 function largestNumber(n) { var nu
我是一名优秀的程序员,十分优秀!