找数组的i,j(j>i)使得a[j] - a[i]的值最大(算法)
来源:互联网 发布:淘宝店铺的层级 编辑:程序博客网 时间:2024/05/16 04:39
这是一个面试题。
数组a[0..n-1],找出i和j使得a[j] - a[i]的值最大。
注意j > i。
要求是时间复杂度O(n),空间复杂度O(1)。
先贴一个代码,我觉得应该还能简化以下,但是时空复杂度还是满足要求的。欢迎讨论,更好的办法。
两个for循环嵌套了,用平摊法可以得到,复杂度不是O(n^2),而是O(n)
#include <stdio.h>int a[10] = {6, 5, 4, 8, 1, 8, 0, 6, 9, 4};int main(){ int i, j, k; int max = 1, min = 0, min2 = 0; i = min; k = min; for (j = 1; j < 9; j++) { if (a[j + 1] > a[max]) { max = j + 1; for (; i < max; i++) { if (a[i] < a[min]) min = i; } } else if(a[j + 1] <= a[max]) { for ( ;k <= j; k++) { if (a[k] < a[min2]) min2 = k; } if (a[j + 1] - a[min2] > a[max] - a[min]) { max = j + 1; min = min2; } } } printf("%d, %d\n", max, min); return 0;}
- 找数组的i,j(j>i)使得a[j] - a[i]的值最大(算法)
- 【谷歌面试题】给出一个数组A,找出一对 (i, j)使得A[i] <= A[j] (i < j)并且j-i最大
- 算法3:找出一个整数数组里面两个查值最大的两个下标a[j]-a[i]最大并且i<j
- 【分治法】在数组A中,返回i<j,且A[i]>A[j]的(i,j)配对的数量
- 数组a[i++]=j 与 a[i]++ 的区别
- 给定无序数组A,在线性时间内找到i和j,j>i,并且保证A[j]-A[i]是最大的。
- 一个数组a[0...n-1],求a[i]-a[j]的最大值,其中i>j
- 一个数组a[0...n-1],求a[j]-a[i]的最大值,其中i<j
- 求一个数组(a(i,j))中元素相减的最大值,且i<=j
- Codeforces 61E Enemy is weak 求i<j<k && a[i]>a[j]>a[k] 的对数 树状数组
- 关于二维数组a[i][j]
- a[i][j]与a[j][i]性能差别的原因
- 求a[j]-a[i]的最大值,其中j>=i
- 程序性能优化:a[i][j]与a[j][i]
- 阅读 找数字a[i][j]!=a[j][i] 特定格式输出
- 交换i,j的值
- 运算优先级的坑a[i++] = a[j]
- 第 15 周项目 a[i][j]<<a[j][i] 二维数组变形
- 一个导师的思考
- Android横竖屏切换相关总结
- Service播放MP3
- 关于结构体的内存对齐
- directshow媒体播放
- 找数组的i,j(j>i)使得a[j] - a[i]的值最大(算法)
- 微软demo地址
- ActivityGroup中嵌套activity时出现的黑色横线
- 第一個C程序
- 新建文章1
- xheditor在线编辑器的使用
- android 9 patch 图片(.9.png 格式图片)
- 微软等公司数据结构+算法面试100题---数组
- ANDROID RES下三个DRAWABLE文件夹的用途