【问题标题】:How to optimise this code of sorting,this is not exeuting within the time limits.This question is from hackerrank [closed]如何优化排序的代码,这不是在时间限制内执行。这个问题来自hackerrank [关闭]
【发布时间】:2020-06-27 08:08:22
【问题描述】:

如何降低这段代码的时间复杂度,这不是在时间内执行

来自hackerrank的确切问题--

在下面的编辑器中完成 circularArrayRotation 函数。 它应该返回一个整数数组,表示指定索引处的值。

circularArrayRotation 具有以下参数:

a:要旋转的整数数组

k:整数,旋转次数

查询:整数数组,要报告的索引

   vector<int> circularArrayRotation(vector<int> a, int k, vector<int> queries) {
           int i,temp;
           vector<int> ans;
           //to perform number of queries k
            while(k--)
            {  //shift last element to first pos and then move rest of elements to 1 postion forward
                temp=a[a.size()-1];   //last element
                for(i=a.size()-1;i>0;i--)
                {
                    a[i]=a[i-1];
                }
                a[0]=temp;
                
            }
            
            for(i=0;i<queries.size();i++)
            {
                ans.push_back(a[queries[i]]);
            }
            return ans;
        }

【问题讨论】:

  • 在编写任何代码之前,您需要先获得正确的算法
  • 你应该解释到底是什么问题
  • @Damien 问题是..我必须将向量 a k 次旋转,然后返回向量 a 的第 i 个位置的值,并且 i 属于向量查询,简而言之,向量查询包含元素的位置(索引值)。对于每个索引值,我必须显示(或存储在另一个向量中)向量 a 中旋转 k 次的对应值

标签: c++ arrays algorithm sorting time-complexity


【解决方案1】:

向量a 在while 循环中被k 旋转。整个循环可以通过添加k 并在访问a 中的元素时使用模数来删除:

ans.push_back(a[(queries[i]+k)%a.size()]);

注意:您可能需要处理 k 的负值。

注意:也许应该是减号而不是加号。

另一种方法是使用 std::rotate。

此外,ans 向量应该被预先分配以将分配的数量减少到一个:

ans.reserve(queries.size());

【讨论】:

  • 问题是..我必须将向量a旋转k次,然后返回向量a的第i个位置的值,并且i属于向量查询,总之向量查询包含位置(索引值)的元素。对于每个索引值,我必须显示(或存储在另一个向量中)向量 a 中旋转 k 次的对应值
  • 这应该有效,...有一个减号!
猜你喜欢
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 2019-10-17
  • 2021-01-25
相关资源
最近更新 更多