【问题标题】:Given an array with n elements and an integer k. Divide the array into subarrays, each of them containing k ekements给定一个包含 n 个元素和一个整数 k 的数组。将数组划分为子数组,每个子数组包含 k 个元素
【发布时间】:2019-09-19 16:53:43
【问题描述】:

例如:

输入:arr[]={1, 32, 5, 6, 9, 3} 和 k=2

子数组将包含元素 {132}、{56}、{93}。

现在将这些子数组排序为 {56}、{93}、{132}。将这些子数组合并在一起,并按排序顺序显示为原始数组的元素

最终输出:arr[]={5, 6, 9, 3, 1, 32}

【问题讨论】:

  • 请尽快给出完整的 C++ 解决方案。这个问题在 Informatica 面试中被问过很多次,我将在 15 天内进行 Informatica 面试。我可以解决排序部分,然后我就卡住了.请提供C++解决方案
  • 有人请尽快提供解决方案(仅限 C++)

标签: arrays sub-array


【解决方案1】:
void SortByGroup(vector<int>& v, int k)
{
    int n = v.size();
    int index;
    string str = " ";
    vector<pair<int, int> > arr;    
    for (int i = 0; i < n; i = i + k)
    {   
        str = " ";
        for (int j = i ; j < i+ k ; j++) 
        {
            str += to_string(v[j]);     //convert k number into string 
        }   
        arr.push_back(make_pair(atoi(str.c_str()), i)); //push string into other vector

    }
    sort(arr.begin(), arr.end()); // Sorting of array
    vector<int> res;

    for (int i = 0; i < (n / k); i++) { 
        int index = arr[i].second; //starting index of contcanate string , run k time from index to get actual no
        for (int j = 0; j < k; ++j)
        {
            res.push_back(v[index++]); 
        }   
    }
    for (int i = 0; i < n; i++) {
        cout << res[i] << " ";
    }
}

int main()
{       
    int k =2;
    vector<int> vec{ 1, 32, 5, 6, 9, 3 };
    SortByGroup(vec,k);
    return 0;       
}

【讨论】:

  • 请简要描述您在该代码中所做的工作以及您如何解决问题。
【解决方案2】:

首先将数组划分为 (n+k-1)/k 段,并将值插入到向量中。 将每个段值转换为字符串并创建用户定义数据类型,如包含字符串、字符串长度和段的原始索引的结构。按字典顺序根据字符串长度对结构进行排序。 现在您已经根据结构对结构进行了排序。

代码实现

#include<bits/stdc++.h>
using namespace std;
struct con
{
    string str;
    int len;
    int ind;
};
bool comp(con a,con b)
{
    if(a.len<=b.len)
    {
        if(a.len==b.len)
        return a.str<b.str;
        return true;
    }
    //return true;
    return false;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        int arr[n];
        for(int i=0;i<n;i++)
        cin>>arr[i];
        int k;
        cin>>k;
        int s=n/k;
        if(n%k!=0)
        s=s+1;
        vector<int>b[s];
        int m=-1;
        for(int i=0;i<n;i++)
        {
            if(i%k==0)
            m++;
            b[m].push_back(arr[i]);
        }
        con st[s];
        for(int i=0;i<s;i++)
        {
            string str="";
            for(int j=0;j<b[i].size();j++)
            {
                str+=to_string(b[i][j]);
            }
            st[i].str=str;
            st[i].len=str.length();
            st[i].ind=i;
        }
        sort(st,st+s,comp);
        for(int i=0;i<s;i++)
        {
            m=st[i].ind;
            for(int j=0;j<b[m].size();j++)
            cout<<b[m][j]<<" ";
        }
        cout<<endl;
    }
}

【讨论】:

  • 请在您的代码中添加一些解释,以便其他人可以从中学习
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
  • 2017-12-27
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2022-09-27
  • 1970-01-01
相关资源
最近更新 更多