数组的交叉输出
要求:
1、任选一种编程语言,写代码,实现功能。
有个int数组,int[]。
n个元素为一组,正序输出。
m个元素为一组,逆序输出。
然后重复上面2步。
public static List<Integer> crossOutput(int[] arr,int n,int m){
int len = arr.length;
List<Integer> ans = new ArrayList<>();
List<Integer> reverseSubArray = new ArrayList<>();//倒序子数组
List<Integer> subArray = new ArrayList<>();//正序子数组
int i = 0;
while(i<len){
while(subArray.size()<n){
subArray.add(arr[i]);
i++;
}
while(reverseSubArray.size()<m){
reverseSubArray.add(0,arr[i]);
i++;
}
ans.addAll(subArray);
ans.addAll(reverseSubArray);
subArray.clear();
reverseSubArray.clear();
}
return ans;
}
const splice = (array, by) => {
if(!array.length) return []
return array.splice(0, by)
}
const reverseSplice = (array, by) => {
if(!array.length) return []
return array.splice(0, by).reverse()
}
const processInput = (array = []) => {
let result = []
while(array.length){
result = result.concat(splice(array,2))
result = result.concat(reverseSplice(array,3))
}
return result
}
console.log(processInput([1,2,3,4,5,6,7,8,9,10]))
function crossOut(array){
let n = 2;
let m = 3;
let result = [];
while( array.length != 0 ){
let n_arr = array.slice(0, n)
let m_arr = array.slice(n, n + m).reverse();
result.push( ...n_arr, ...m_arr );
array.splice(0, n + m);
}
return result.join(",");
} let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
let tmp_arr = []
let index_arr = [0]
function formatArr(n, m, arr) {
let sum = 0
while (sum < arr.length) {
sum += n
index_arr.push(sum)
sum += m
index_arr.push(sum)
}
for (let i = 0; i < index_arr.length; i++) {
if (i % 2 == 0) {
tmp_arr = tmp_arr.concat(arr.slice(index_arr[i], index_arr[i + 1]))
} else {
tmp_arr = tmp_arr.concat(arr.slice(index_arr[i], index_arr[i + 1]).reverse())
}
}
console.log(tmp_arr)
}
formatArr(2, 3, arr)