首页 > 解决方案 > 模行为 C++

问题描述

我正在研究以下hackerrank问题:

https://www.hackerrank.com/challenges/ctci-array-left-rotation/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=arrays

我向左旋转以下向量(即值应向左移动d时间):

1 2 3 4 5

在哪里d = 4

这是我的旋转代码:

using namespace std;

vector<int> rotLeft(vector<int> a, int d) {
    vector<int> r(a.size());
    for(int i = 0; i < a.size(); ++i){


        if(a[i] == 1) // debug output
            cout << (i-d) % r.size() << " ; " << (i-d) << " ; " << r.size() << " ; " << -4 % 5 << endl;

        // actual code
        r[((i-d) % r.size() + r.size()) % r.size()] = a[i];
    }
    return r;
}

代码返回5 0 1 2 3而不是预期的5 1 2 3 4.

我已将问题缩小到(i-d) % r.size(). 出于某种原因,(i-d) % r.size()是 2 而不是 -4(这是我所期望的)。调试输出为2 ; -4 ; 5 ; -4,表示i-d为 -4,r.size()为 5,-4 % 5应为 -4。为什么会这样?

标签: c++

解决方案


推荐阅读