最长可整合数组

    xiaoxiao2026-06-19  21

    先给出可整合数组的定义。如果一个数组在排序之后,每相邻两个数差的绝对值都为1,则该数组为可整合数组。例如,[5,3,4,6,2]排序之后为[2,3,4,5,6],符合每相邻两个数差的绝对值都为1,所以这个数组为可整合数组。给定一个整型数组arr,请返回其中最大可整合子数组的长度。例如,[5,5,3,2,6,4,3]中最大可整合子数组为[5,3,2,6,4],所以返回5。

    分析:判断一个子数组是否为可整合,只需用哈希表判断是否有重复元素,无重复元素判断最大值减去最小值是否等于数组长度即可

    #include<iostream> #include<vector> #include<algorithm> #include<unordered_map> using namespace std; int maxLen(vector<int> &nums) { unordered_map<int, int> m; int res = 0; for (int i = 0; i < nums.size(); i++) { int maxNum = INT_MIN, minNum = INT_MAX; for (int j = i; j < nums.size(); j++) { if (m.find(nums[j])== m.end()) { //没有重复值 m[nums[j]]++; //则记录kye,value maxNum = max(nums[j], maxNum);//计算最大数 minNum = min(nums[j], minNum);//最小数 if (j-i==maxNum-minNum) //最大减去最小等于数组长 res =max(j - i+1,res); //得到结果 } else break; //找到重复值,直接退出 } m.clear(); //注意要清空哈希表 } return res; } int main() { vector<int>v = {5,5,3,3,4,5,2,6,9,7,8,4,6,2 }; cout << maxLen(v) << endl; }
    转载请注明原文地址: https://ju.6miu.com/read-1310699.html
    最新回复(0)