Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 难以找到解决阵列问题的方法_Algorithm - Fatal编程技术网

Algorithm 难以找到解决阵列问题的方法

Algorithm 难以找到解决阵列问题的方法,algorithm,Algorithm,请帮我想一想。 下面是关于我们必须做什么的简短描述 输入:数组 输出:索引{i,j}(允许i=j),最大 上诉=A[i]+A[j]+abs(i-j) 示例 输入:A={1,3,-1} 输出:{1,1} 上诉=A[1]+A[1]+abs(1-1)=3+3+0=6 public int[]maxAppealPair(int[]A){ 如果(A==null | | A.length==0)返回新的int[]{-1,-1}; int start=0,end=A.length-1; int m1,m2;

请帮我想一想。
下面是关于我们必须做什么的简短描述

输入:数组
输出:索引{i,j}(允许i=j),最大 上诉=A[i]+A[j]+abs(i-j)

示例
输入:A={1,3,-1}
输出:{1,1}
上诉=A[1]+A[1]+abs(1-1)=3+3+0=6

public int[]maxAppealPair(int[]A){
如果(A==null | | A.length==0)返回新的int[]{-1,-1};
int start=0,end=A.length-1;
int m1,m2;
int max=整数最大值;
while(启动最大值){
最大值=当前值;
m1=开始,m2=结束;
}
}
}
这是到目前为止我的代码

首先,我尝试用两个指针来解决这个问题 但问题是
要使用两个指针(开始、结束),我们应该对数组进行排序,但是如果我们对数组进行排序,如何知道最后的索引


但是,如果数组未排序,我应该在开始、结束指针上执行什么操作?

因此,让我们打破给定的条件

a[i] + a[j] + abs(i-j)
这可以通过两种方式写入:拆卸abs()

所以

所以您只需要创建两个数组,其中一个数组存储元素及其索引的和,而另一个数组则存在差异。而不仅仅是从这两个列表中选择最大元素,这将是最大值。这是密码

a = [int(i) for i in input().split()]
temp1 = list()
temp2 = list()
n = len(a)
for i in range(n):
    temp1.append(a[i]-i)
    temp2.append(a[i]+i)
maxi1 = INT_MIN
maxi2 = INT_MIN
for i in range(n):
    if maxi1 < temp1[i]:
        maxi1 = temp1[i]
        index1 = i
    if maxi2 < temp2[i]:
        maxi2 = temp2[i]
        index2 = i
print(index1,index2)
a=[int(i)表示输入中的i().split()]
temp1=list()
temp2=list()
n=len(a)
对于范围(n)中的i:
temp1.追加(a[i]-i)
temp2.追加(a[i]+i)
maxi1=INT\u MIN
最大值2=整数最小值
对于范围(n)中的i:
如果maxi1

当列表的大小小于2时要小心。

不使用2个列表来存储每个元素,我们只需修改for循环,就可以使用2个变量来存储两种情况下的最大值。这将把空间复杂度降低到O(1),在我们当前的解决方案中是O(n)。
a[i] + a[j] + i - j
a[i] + a[j] - i + j
(a[i] + i) + ( a[j] - j) and
(a[i] - i) + (a[j] + j)
a = [int(i) for i in input().split()]
temp1 = list()
temp2 = list()
n = len(a)
for i in range(n):
    temp1.append(a[i]-i)
    temp2.append(a[i]+i)
maxi1 = INT_MIN
maxi2 = INT_MIN
for i in range(n):
    if maxi1 < temp1[i]:
        maxi1 = temp1[i]
        index1 = i
    if maxi2 < temp2[i]:
        maxi2 = temp2[i]
        index2 = i
print(index1,index2)