【发布时间】:2018-08-02 12:50:04
【问题描述】:
示例:开头的数组是6 6 9 7,其中n=4。
初始数组:6 6 9 7
第一个最大值:9
数组更改为:6 6 9 3(因为 arr[3]-4=3)
第二个最大值:9
数组更改为:6 6 5 3(因为 arr[2]-4=5)
第三个最大值:6
数组更改为:6 2 5 3(因为 arr[1]-4=2)
第四个最大值:6
数组更改为:2 2 5 3(因为 arr[0]-4=2)
这可以在 O(n^2) 中轻松实现,但可以更有效地完成吗?
以下是 O(n^2) 解决方案的代码:
int arr[]={6,6,9,7};
int n=4;
for(int i=0;i<n;i++)
{
int max=0;
for(int j=0;j<n;j++)
{
if(arr[j]>arr[max])
max=j;
}
System.out.println(arr[max]);
arr[n-1-i]-=n;
}
【问题讨论】:
-
目前还不清楚您到底想做什么。您想返回单个修改后的数组吗?还是您只想返回最终修改后的数组?向我们展示您的 O(n^2) 算法,或者给我们更详细的要求。
-
只是那些最大值而不是修改后的数组
-
我只是从最后一个单元格开始一个一个地从数组单元格中减去 n。之后在每个步骤中找到最大值。 @JimMischel
-
添加了我的代码@JimMischel
标签: arrays algorithm sorting data-structures max