摺疊陣列 LintCode

2021-08-14 10:40:20 字數 1206 閱讀 1304

給乙個長度為 n 的陣列 nums 和乙個長度為 k 的陣列 req, 你需要根據要求摺疊陣列,並輸出摺疊的結果

1.如果 req[i] = 0 意味著你應該從左到右摺疊, 例如:

1 2 3 4 5 6 7 8  ==>   4 3 2 1

5 6 7 8

2.如果 req[i] = 1 意味著你應該從右往左摺疊, 例如:

1 2 3 4 5 6 7 8  ==>   8 7 6 5

1 2 3 4

更多的例子:

從左到右摺疊43

21 ==> 655

6783

4217

8從右到左摺疊

65 ==> 834

1214

7856

327

注意事項:

n 為 2 的冪

k 是指數.(例如 n = 2^3 = 8,k = 3)

樣例:

給出陣列 nums = [1, 2, 3, 4, 5, 6, 7, 8] 和 陣列 req = [0, 0, 1] 原地改變元素位置為 [8, 1, 4, 5, 6, 3, 2, 7]

思路:

對於不同的摺疊後的陣列,表示方法為由上到下,從左到右依次存放到陣列中。

4 3 2 1  -> 

5 6 7 8

從左向右摺疊,將陣列的前半部分反向,根據長度len的大小,將前半部分與後半部分按照相對順序組合成新的陣列。

從右向左摺疊,將陣列的後半部分反向,根據長度len的大小,將後半部分與前半部分按照相對順序組合成新的陣列。

#ifndef c703_h

#define c703_h

#include

#include

#include

using

namespace

std;

class solution

return nums;

}void left(vector

&nums, int len)

nums = res;

}void right(vector

&nums, int len)

nums = res;

}};#endif

LintCode 陣列劃分

給出乙個整數陣列nums和乙個整數k。劃分陣列 即移動陣列nums中的元素 使得 返回陣列劃分的位置,即陣列中第乙個位置i,滿足nums i 大於等於k。您在真實的面試中是否遇到過這個題?yes 樣例給出陣列nums 3,2,2,1 和 k 2,返回 1 注意你應該真正的劃分陣列nums,而不僅僅只...

LintCode 陣列劃分

陣列劃分 給出乙個整數陣列nums和乙個整數k。劃分陣列 即移動陣列nums中的元素 使得 所有小於k的元素移到左邊 所有大於等於k的元素移到右邊 返回陣列劃分的位置,即陣列中第乙個位置i,滿足nums i 大於等於k。樣例 給出陣列nums 3,2,2,1 和 k 2,返回 1 注意 你應該真正的...

LintCode 陣列劃分

給出乙個整數陣列 nums 和乙個整數 k。劃分陣列 即移動陣列 nums 中的元素 使得 所有小於k的元素移到左邊 所有大於等於k的元素移到右邊 返回陣列劃分的位置,即陣列中第乙個位置 i,滿足 nums i 大於等於 k。class solution param nums the integer...