最长可整合子数组
来源:互联网 发布:淘宝0秒付款怎么做到的 编辑:程序博客网 时间:2024/06/06 13:12
先给出可整合数组的定义: 如果一个数组arr在排序之后,从最小值到最大值的顺序中,每相邻两个数之间差的绝对值都为1,则arr为可整合数组。 例如: arr = {5,3,4,6,2},再排序之后为:{2,3,4,5,6},排序后符合每相邻两个数之间差的绝对值都为1,所以arr是可整合数组。 给定一个整形数组arr,请返回其中长度最大的可整合子数组的长度。
[5,0,1,2,4,3,9],最长可整合子数组为[5,0,1,2,4,3],所以返回6
[6,7,3,0,1,2,4,7],最长可整合子数组为[3,0,1,2,4],所以返回5
要求:如果数组长度为N,时间复杂度请达到O(N^2)
[6,7,3,0,1,2,4,7],最长可整合子数组为[3,0,1,2,4],所以返回5
要求:如果数组长度为N,时间复杂度请达到O(N^2)
分析:
首先进行穷举,也是n^2个组合,在每个组合中,设置max和min,如果max-min=j-i,也就是区域的长度,则代表该区域为可整合数组。
比如3 2 4 5 6,max为6,min为2,这样假设3的下标为i,6的下标则为i+4,二者之差为4,恰好等于max-min,所以该段是可整合数组。
#include<iostream>#include <hash_map>#include <algorithm>using namespace std;int a[]={5,5,3,2,6,4,3};int fun(int len){ int i,j; int minNum=INT_MAX; int maxNum=INT_MIN; int length=0; hash_map <int,int> mymap; for(i=0;i<len;i++) { minNum=INT_MAX; maxNum=INT_MIN; mymap.clear(); for(j=i;j<len;j++){if(mymap.find(a[j])!=mymap.end()) break;mymap[a[j]]=0; minNum=std::min(a[j],minNum); maxNum=std::max(a[j],maxNum); if((maxNum-minNum)==(j-i)) { length=max(length,j-i+1); } } } return length;}int main(){ cout<<fun(7)<<endl; return 0;}
0 0
- 最长可整合子数组
- 最长可整合子数组长度
- 数组与矩阵---最长可整合子数组的长度
- 最长可整合数组
- 最长的可整合子数组的长度
- 最长的可整合子数组的长度+累计和为k的最长子数组
- 后缀数组--(可重叠最长重复子串问题)
- 最长连续子数组
- 最长子数组
- 【后缀数组求可重叠的k 次最长重复子串】POJ 3261
- poj 3261 后缀数组 Or KMP 可重叠的 k 次最长重复子串
- PKU3261(Milk Patterns)求可重叠k次的最长重复子串(后缀数组+二分)
- 后缀数组--可重叠的K次最长重复子串(POJ3261)
- POJ 3261 Milk Patterns (离散化+后缀数组 可重叠k次最长重复子串)
- Hdu 4080 & Poj 3882 Stammering Aliens (后缀数组 可重叠k次最长重复子串)
- poj-3261 后缀数组求可重叠的k次最长重复子串
- POJ3261 求指定出现次数的可重叠的最长重复子串(后缀数组)
- 后缀数组模版 及 可重叠和不可重叠最长重复子串【for_wind】
- What is meant by back propagation in an ANN compared to a biological neural network?
- 飞龙的程序员书单 – 思想、工程、架构、职业发展
- error C4013: 'sprintf' undefined; assuming extern returning int
- jquery手机全屏上下滑动
- 顺序串
- 最长可整合子数组
- 【LWJGL2 WIKI】【现代OpenGL篇】用BufferSubData更新VBO方形
- 【转】详解公钥、私钥、数字证书的概念
- ios之图片圆角半径
- FP-Tree算法的实现
- Android——ACTION_GET_CONTENT和ACTION_PICK
- UVa 10855 - Rotated square
- 时钟中断(1)
- 213,使用UINavigationController实现页面跳转