<分区>
给定一个列表和一个数字 k,反转前 k 个元素并留下接下来的 k 个元素。在整个列表中重复此操作。我的意思是反转,改变数字的符号。
这是亚马逊的一个面试问题,我在一个网站上看到的,我试图通过思考如何解决它来解决它,当然我也想知道解决它的最快算法和你的想法。
我考虑过将数组划分为 K 步,然后反转,跳过。然后像合并排序一样合并数组。
<分区>
给定一个列表和一个数字 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/