c++ - 反转数字列表并跳过其他数字

标签 c++ algorithm

<分区>

给定一个列表和一个数字 k,反转前 k 个元素并留下接下来的 k 个元素。在整个列表中重复此操作。我的意思是反转,改变数字的符号。

这是亚马逊的一个面试问题,我在一个网站上看到的,我试图通过思考如何解决它来解决它,当然我也想知道解决它的最快算法和你的想法。

我考虑过将数组划分为 K 步,然后反转,跳过。然后像合并排序一样合并数组。

最佳答案

for (int i=0;i<size;i+=k*2)
    for (int j=0;j<k&&i+j<size;j++)
         arr[i+j]=-arr[i+j];

如果您确定数组大小是 2 * k 的倍数或等于 x * 2 * k - k,则:

for (int i=0;i<size;i+=k*2)
    for (int j=0;j<k;j++)
         arr[i+j]=-arr[i+j];

关于c++ - 反转数字列表并跳过其他数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19198399/

相关文章:

python - 在 map 上划分长度为 1 的部分

algorithm - 附加偏序的旅行商问题

c - 字符串格式化时间优化 : pad a line to length K by adding spaces between words

c++ - 如何在 OS X 上安装 gprof

java - java中方法的原型(prototype)

c++ - boost::boykov_kolmogorov_max_flow 的反向边缘图

java - `n` 一袋沙子并插入盒子,算法

c++ - 首选包含 std::size_t 的 header

c++ - 根据C++中的字符串值创建类对象实例的好方法?

algorithm - 实现尾递归列表操作