数组的交叉输出
要求:
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)