`
duoduodeai
  • 浏览: 51127 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

超复杂算法,如何求得数组中的绝对值的最大值

 
阅读更多

给出一个以0为起始索引的非空数组 A 其中包含 N 个非负整数,返回数组 A 中任意两个元素之差的绝对值的最大值:

amplitude(A) = max{ A[P] − A[Q] : 0 ≤ P, Q < N }

编写一个函数

class Solution { public int amplitude(int[] A); }

假定:

N 是 [1..1,000,000] 内的 整数;

数组 A 每个元素是取值范围 [0..5,000,000] 内的 整数 .

例如,给出

 A[0] = 10  A[1] = 2   A[2] = 44

 A[3] = 15  A[4] = 39  A[5] = 20

你的函数应该返回 42.

复杂度:

最坏-情况下,期望的时间复杂度是 O(N);

最坏-情况下,期望的空间复杂度是 O(1), 输入存储除外 (不计输入参数所需的存储空间).

输入数组中的元素可以修改.

2
6
分享到:
评论
24 楼 抛出异常的爱 2013-03-11  
kidneyball 写道
duoduodeai 写道
JianbinJava 写道
楼猪,,你要讲的是排序还是求最大值..
标题跟内容不相符啊...

傻帽,看不懂吗?老师先给你分析下题目,首先求求组中所有相邻元素的值差,然后求绝对值,最后求绝对值中的最大值,傻帽,回家练练吧,这里不适合你。


楼主原帖中完全没有提到“相邻”,2楼不知怎么的就按着“相邻”来做,真是很离奇。题目要求时间复杂度O(N),时间复杂度是按元素访问来算的,2楼的解法在一个双层循环里Math.abs(a[i] - a[i + 1]),时间复杂度怎么看也不象是O(N)吧。

max = 0 ;
index_max = 0;
for(i=0 ; i < a.langth-1 ;i++){
   if(max < abs(a[i]-a[i+1])){
       max = a[i] -a[i+1];
       index_max = i ;
    }

}
sysout(max);
sysout(index_max);

o(n)
o(1)

相邻?
23 楼 shenliuyang 2013-03-11  
给一堆数, 求出任意两个数相减后。 求他们的绝对值的最大值。
22 楼 ahack 2013-03-11  
kidneyball 写道
duoduodeai 写道
JianbinJava 写道
楼猪,,你要讲的是排序还是求最大值..
标题跟内容不相符啊...

傻帽,看不懂吗?老师先给你分析下题目,首先求求组中所有相邻元素的值差,然后求绝对值,最后求绝对值中的最大值,傻帽,回家练练吧,这里不适合你。


楼主原帖中完全没有提到“相邻”,2楼不知怎么的就按着“相邻”来做,真是很离奇。题目要求时间复杂度O(N),时间复杂度是按元素访问来算的,2楼的解法在一个双层循环里Math.abs(a[i] - a[i + 1]),时间复杂度怎么看也不象是O(N)吧。


看到这种2B楼主真心蛋疼。
21 楼 kidneyball 2013-03-11  
duoduodeai 写道
JianbinJava 写道
楼猪,,你要讲的是排序还是求最大值..
标题跟内容不相符啊...

傻帽,看不懂吗?老师先给你分析下题目,首先求求组中所有相邻元素的值差,然后求绝对值,最后求绝对值中的最大值,傻帽,回家练练吧,这里不适合你。


楼主原帖中完全没有提到“相邻”,2楼不知怎么的就按着“相邻”来做,真是很离奇。题目要求时间复杂度O(N),时间复杂度是按元素访问来算的,2楼的解法在一个双层循环里Math.abs(a[i] - a[i + 1]),时间复杂度怎么看也不象是O(N)吧。
20 楼 shenliuyang 2013-03-11  
看了标题来的, 猛的一看详情,  尼玛 小学 题目。
19 楼 albrich 2013-03-11  
youtops 写道
怎么这么多人排序,直接一次遍历找到最大值最小值就可以了
amplitude(A) = max{ A[P] − A[Q] : 0 ≤ P, Q < N }
amplitude(A) = =max{A[i],0 ≤ i}-min{A[j],0 ≤ j}

就是找到集合A中的最大值-A中的最小值

伪代码如下:
int max = A[0];//记录当前遍历的最大值 A[0]将修改用来存放最小值
for( int index = 1; index < A.length; index ++)
{
    //max 不是最大,则重新赋值
    if(max < A[index])
    {
        max = A[index];
    }
    // A[0] 不是最小,则重新赋值
    if(A[0] > A[index])
    {
        A[0]  =  A[index];
    }
}
//返回最大值-最小值
return max - A[0];

算法复杂度为O(N) 空间复杂度为O(1)

赞同
18 楼 youtops 2013-03-10  
怎么这么多人排序,直接一次遍历找到最大值最小值就可以了
amplitude(A) = max{ A[P] − A[Q] : 0 ≤ P, Q < N }
amplitude(A) = =max{A[i],0 ≤ i}-min{A[j],0 ≤ j}

就是找到集合A中的最大值-A中的最小值

伪代码如下:
int max = A[0];//记录当前遍历的最大值 A[0]将修改用来存放最小值
for( int index = 1; index < A.length; index ++)
{
    //max 不是最大,则重新赋值
    if(max < A[index])
    {
        max = A[index];
    }
    // A[0] 不是最小,则重新赋值
    if(A[0] > A[index])
    {
        A[0]  =  A[index];
    }
}
//返回最大值-最小值
return max - A[0];

算法复杂度为O(N) 空间复杂度为O(1)
17 楼 李立召 2013-03-10  
使用TreeSet进行了实现:
public class Solution {
public static void amplitude(int[] as) {
Set<Integer> sets = new TreeSet<Integer>();
for (Integer s : as) {
sets.add(s);
}

Integer[] b = new Integer[sets.size()];
sets.toArray(b);
System.out.println(Math.abs(b[0] - b[b.length - 1]));

}

public static void main(String[] args) {
amplitude(new int[] { 10, 2, 44, 15, 39, 20 });
}
}
16 楼 laogao3232 2013-03-10  
遍历数组,算差值,取绝对值。
放入TreeSet,去头尾就是最大与最小值了。
15 楼 duoduodeai 2013-03-10  
JianbinJava 写道
楼猪,,你要讲的是排序还是求最大值..
标题跟内容不相符啊...

傻帽,看不懂吗?老师先给你分析下题目,首先求求组中所有相邻元素的值差,然后求绝对值,最后求绝对值中的最大值,傻帽,回家练练吧,这里不适合你。
14 楼 JianbinJava 2013-03-10  
楼猪,,你要讲的是排序还是求最大值..
标题跟内容不相符啊...
13 楼 duoduodeai 2013-03-10  
hardPass 写道


o(1)?说笑吧。这种需求怎么着都得遍历到吧?
只是遍历一次,记录下最大值和最小值,就可以了么

那个被楼主认为是很好的算法,我没仔细看,只是看到sort,就凌乱了~


怎么会凌乱了呢
12 楼 hardPass 2013-03-10  


o(1)?说笑吧。这种需求怎么着都得遍历到吧?
只是遍历一次,记录下最大值和最小值,就可以了么

那个被楼主认为是很好的算法,我没仔细看,只是看到sort,就凌乱了~

11 楼 lection.yu 2013-03-09  
抛出异常的爱 写道
duoduodeai 写道
gaopenghigh 写道
都是非负整数,那不就是最大值减去最小值吗?  


不是,gao_xianglong已经给出算法了,也谢谢你的回复,小弟谢过了

不是最大减最小的测试用例?

没错。。。。我傻了。还统计四个变量。。最大减最小足以。。遍历一次足矣。。复杂2n
10 楼 lection.yu 2013-03-09  
没错。。。。我傻了。还统计四个变量。。最大减最小足以。。遍历一次足矣。。复杂2n
9 楼 lection.yu 2013-03-09  
遍历一次,分别统计出正数和负数绝对值最大和最小的数值。四个变量来记录。这样复杂度应该4n+2
8 楼 抛出异常的爱 2013-03-09  
duoduodeai 写道
gaopenghigh 写道
都是非负整数,那不就是最大值减去最小值吗?  


不是,gao_xianglong已经给出算法了,也谢谢你的回复,小弟谢过了

不是最大减最小的测试用例?
7 楼 gaopenghigh 2013-03-09  
题目
“给出一个以0为起始索引的非空数组 A 其中包含 N 个非负整数,返回数组 A 中任意两个元素之差的绝对值的最大值:”
没有要求是紧挨着的两个元素之差呀?

duoduodeai 写道
gaopenghigh 写道
都是非负整数,那不就是最大值减去最小值吗?  


不是,gao_xianglong已经给出算法了,也谢谢你的回复,小弟谢过了
6 楼 duoduodeai 2013-03-09  
gaopenghigh 写道
都是非负整数,那不就是最大值减去最小值吗?  


不是,gao_xianglong已经给出算法了,也谢谢你的回复,小弟谢过了
5 楼 gaopenghigh 2013-03-09  
都是非负整数,那不就是最大值减去最小值吗?  

相关推荐

    matlab开发-最大绝对值设置最大绝对值

    这个函数非常直观,它的核心思想就是找到`x`中所有元素经过绝对值运算后的最大值。在处理数值数据时,这尤其有用,因为它可以帮助我们快速识别出数据中的最大波动或异常值。 首先,让我们看看`maxabs.m`这个文件。...

    算法 子数组最大乘积

    3. **时间复杂度分析**:计算`s[]`和`t[]`的时间复杂度为`O(N)`,计算`p[]`的时间复杂度也为`O(N)`,再加上查找`p[]`中的最大值的时间复杂度`O(N)`,总的时间复杂度为`O(N)`。 #### 解法二:简化分析 **核心思想**...

    系数绝对值最大 图像融合MATLAB算法 含融合源图像

    在提供的压缩包中,包含了“系数绝对值最大图像融合”的源代码和可能的示例图像,用户可以运行这些代码来直观地理解和学习这个融合算法的实现过程。通过修改源代码中的图像路径和参数,还可以应用于自己的图像数据集...

    数据结构(JAVA)求一个含有n个整数元素的数组a0..n-1中的最大元素

    总结来说,寻找数组中的最大元素是数据结构和算法的基础问题,可以采用线性搜索的方法,通过逐个比较元素来找到最大值。这个过程体现了Java编程的基本逻辑和控制流,同时也展示了如何处理边界条件和异常情况。对于...

    1.给出一个整数数组,求其中任意两个元素之差的最大值。

    首先对数组进行排序,然后计算排序后数组中最大值与最小值之间的差,这个差即为所求的最大值。 #### 代码解析 在给定的部分代码中,作者采用了冒泡排序算法对数组进行排序。具体实现步骤如下: 1. **初始化数组**:...

    1[1].3.3绝对值定值、最值探讨.题库学生版[收集].pdf

    在软件开发中,这些问题的实际应用可能表现为寻找数组中的最大值和最小值,或者在设计数据库查询时确定最优索引。例如,例22中,如果我们要求`xaxbxc`的最小值,这可能是为了最小化某种成本函数,或者在设计数据库...

    二维数组中的查找

    二维数组中的查找,逐行扫描,行内使用二分查找。最差情况需要扫描所有行,待完善

    matlab开发-最大绝对值设置最大绝对值.zip.zip

    这对于检测数据集中最大值或最小值的范围非常有用,特别是在数据预处理阶段。 4. **编程实践**:在实际编程中,我们可以自定义函数来设置最大绝对值。例如,如果一个计算的结果存储在变量`res`中,我们可以用条件...

    C语言考试题库(20211013014323).pdf

    2-4 题目要求找出数组中绝对值最大的数(可能存在多个)以及绝对值第二大的数,计算最大值的个数和其余数的平均值。这里需要用到排序或者寻找最大和次大值的算法。 2-5 题目要求读取文件中所有四位正整数,右移一位...

    matlab.rar_矩阵中最大值

    在MATLAB中,寻找矩阵中n个绝对值最大的数是一个常见的任务,这在数据分析、数值计算和各种数学问题中都有应用。以下是如何在MATLAB中实现这个功能的详细步骤及相关的MATLAB知识点。 1. **矩阵操作**: 在MATLAB中...

    关于数组的几道面试题1

    使用分治法,将数组不断分割成两半,分别求解子数组的最大值和最小值,最后合并结果。这种方法可以有效地减少比较次数。 ```cpp void MaxandMin(int *a, int l, int r, int& maxValue, int& minValue) { // ......

    汇编语言 20个练习题目 代码加实验报告

    5.15 数据段中已定义了一个有N个字数据的数组M,试编写一程序求出M中绝对值最大的数,把它放在数据段的M+2n单元中,并将该数的偏移地址存放在M+2(n+1)单元中。 5.16 在首地址为DATA的字数组中,存放了100H个16位...

    最大跨度值(信息学奥赛一本通-T1063).rar

    例如,如果数组为[1, 3, 8, 4, 9],最大跨度是9 - 1 = 8,由数组中的最大值9和最小值1构成。解决这个问题的关键在于有效地遍历数组并找到最大和最小元素,而这个过程往往需要线性时间复杂度O(n)。 在信息学奥赛中,...

    数值算法求矩阵的最大特征值的幂法.docx

    【数值算法】求矩阵的最大特征值的幂法是一种在计算机科学和工程计算中常用的方法,特别是在线性代数和数值分析领域。幂法基于迭代思想,用于找出给定方阵的最大特征值及其对应的特征向量。以下是这种方法的详细解释...

    matlab开发-absmax

    `abs`函数用于计算数组中每个元素的绝对值,而`max`函数则用于找出这些绝对值中的最大值。`absmax`函数将这两个功能合并,使得开发者可以一次性找到输入矩阵或向量中绝对值最大的元素。 `absmax`的基本语法如下: ...

    数值算法求矩阵的最大特征值的幂法.pdf

    这里,`A` 是待求解矩阵,`Uk` 和 `Vk` 分别表示当前迭代的向量,`max(Uk)` 表示 `Uk` 中绝对值最大的元素。 3. **收敛判断**:迭代继续直到满足一定的精度条件,例如,当 `max(Uk) - max(Uk-1)` 的绝对值小于预设...

    数组实训.doc

    通过遍历整个矩阵,计算每个元素的绝对值,并更新最大值及其位置。 5. **字符数组**:此例展示了如何给字符数组赋值。数组`c1`被赋值为'0'到'9',而`c2`被赋值为'A'到'Z'。然后依次输出这两个数组的内容。 6. **...

    C语言编程题

    总共包括10个编程题,涉及了判断闰年的函数、判断质数的函数、判断水仙花数的函数、判断完数的函数、求绝对值的函数、求最大公约数的函数、求一维数组中最大值的函数、求一维数组中最小值的函数、在一维数组中查找值...

    《C 程序员面试算法宝典》读书笔记模板x.pptx

    2. 如何查找数组中元素的最大值和最小值 3. 如何找出旋转数组的最小元素 4. 如何找出数组中出现奇数次的数 5. 如何找出数组中第 k 小的数 6. 如何求数组中两个元素的最小距离 7. 如何求解最小三元组距离 8. 如何求...

    LeetCode 1300. 转变数组后最接近目标值的数组和(二分查找)

    接下来,我们需要在数组的最大值和0之间(包括两端)进行二分查找,寻找最合适的 `value`。 二分查找过程中,我们需要验证当前的 `value` 是否会使数组和与 `target` 的差值的绝对值更小。证明数组和与目标值的单调...

Global site tag (gtag.js) - Google Analytics