所以,我有这样的数组:
a[1] = 2
a[4] = 3
a[8] = 1
代表此序列1 1 4 4 4 8
我需要找到中间元素或元素(奇数和偶数); 在这个例子中它是4。
我怎样才能快速完成这项工作?
我的代码很慢:
static int B(int[] array, int size) {
int c = 0;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i]; j++) {
c++;
if (c == size / 2) {
return i;
}
}
}
}
答案 0 :(得分:5)
遍历原始数组并添加所有值
a[1] = 2
a[4] = 3
a[8] = 1
sum = 6
除以2(找到中间)
mid = 6/2 = 3
遍历原始数组并从总和
中减去值check if ans <= 0
if true print index
else continue to next
答案 1 :(得分:0)
对于一种效率更低的方法,运行一次传递并不断更新:)
Javascript(因为我受到Java挑战):
var a=[]
a[1] = 2
a[4] = 3
a[8] = 1
a[9] = 2
a[10] = 3
a[11] = 1
//1 1 4 4 4 8 9 9 10 10 10 11
function middle (arr){
var stack = [],
total = 0,
tmp,
tmpChange,
middle = 0,
change = 0,
middleElement
for (i in arr){
stack.push([i, arr[i]])
total += arr[i]
tmp = Math.ceil(total/2)
change = tmp - middle
middle = tmp
while (change){
tmpChange = stack[0][1] - change
if (tmpChange >= 0) {
stack[0][1] = tmpChange
change = 0
}
else {
change -= stack[0][1]
stack.splice(0,1)
}
}
middleElement = stack[0][0]
}
return middleElement
}
console.log(middle(a))