公司官网开发,平度网站整站优化外包公司,长春网站制作企业,汕头网站建设工作今天分享一道很有意思的算法题目
1、题目描述
奇偶数合并
将所有相邻且相同的偶数相加放入相邻偶数中间 将所有相邻且相同奇数相加#xff0c;替换掉这两个相邻且相同的奇数 最后输出合并后的数组结果。
举例
数组[1,2,2,7,8,3,3,6]
数组奇偶数合并之后[1,2,4,2,7,8,6,1…今天分享一道很有意思的算法题目
1、题目描述
奇偶数合并
将所有相邻且相同的偶数相加放入相邻偶数中间 将所有相邻且相同奇数相加替换掉这两个相邻且相同的奇数 最后输出合并后的数组结果。
举例
数组[1,2,2,7,8,3,3,6]
数组奇偶数合并之后[1,2,4,2,7,8,6,12,6]
2、思路
由于要对偶数合并且将合并值增加到相邻且相等2个偶数之间然后相邻且相等奇数合并原始数组长度可能会发生改变因此需要用额外的数据结构进行存储临时计算结果数据。这里用List进行存储也可以用其它数据结果存储。
另外两个奇数相加等于偶数因此要先计算偶数再计算奇数。
第一轮计算之后需要判断是否还需要递归进行计算如果需要则递归奇偶数合并即可最后输出计算结果。
3、实战
public class Test1 {public static void main(String[] args) {int[] array {1,2,2,7,8,3,3,6};calculatedNum(array);}/*** 奇偶数合并* 将所有相邻且相同的偶数相加放入相邻偶数中间* 将所有相邻且相同奇数相加替换掉这两个相邻且相同的奇数* 最后输出合并后的数组结果** param array 待排序数组* return int[] 结果*/public static int[] calculatedNum(int[] array){if(array.length 0){return new int[0];}ListInteger lists new ArrayList();for (int i 0; i array.length-1; i) {if(array[i]array[i1]){if(array[i]%20){lists.add(array[i]);lists.add(array[i]*2);}else{lists.add(array[i]*2);i;}}else{lists.add(array[i]);}}// 由于上面for循环结束条件是i array.length-1这里需要添加最后一个元素才能遍历完全lists.add(array[array.length-1]);// 将list转成arrayint[] list2Array Arrays.stream(lists.toArray()).mapToInt(x - (int) x).toArray();if(isNeedRepeatCalculated(list2Array)){return calculatedNum(list2Array);}return list2Array;}/*** 判断是否需要二次合并计算** param array 待判断的数组* return boolean 结果*/public static boolean isNeedRepeatCalculated(int[] array){for (int i 0; i array.length-1; i) {if(array[i] array[i1]){return true;}}return false;}
}