C# 有一个int数组A,以其中某个索引位置的元素为起点(比如下面数组从索引4位置开始),向两边扩散,提取出数组中同时满足每相邻两两元素之间差值的绝对值在指定范围内的元素(比如:<= 3),如果有不满足的元素,则从A数组中剔除该元素,生成一个新数组,再提取出数组中同时满足每相邻两两元素之间差值的绝对值在指定范围内的元素(<= 3),以此类推,最终得到的新数组中的元素每相邻两两元素之间差值的绝对值都在指定范围内的元素(<= 3)
原始数组A:
int[] A = { 1, 2, 10, 20, 3, 15, 5, 1, 4};
int diffRange = 3; // 指定的差值的绝对值范围
解析:假设数组A从索引4的位置开始,即元素3,先向左边扩散相邻元素进行比较,前面一个元素为20,差值绝对值为17,不满足条件(<=3),将20从数组A中剔除,得到一个新数组A1 = { 1, 2, 10, 3, 15, 5, 1, 4};继续将元素3(此时该元素的索引变成了3)与前面的10进行比较,也不满足条件,则继续将10从数组中剔除,又得到一个新数组A2 = { 1, 2, 3, 15, 5, 1, 4};继续将元素3(此时的索引变成了2)与前面的2进行比较,满足条件;然后将元素2与前面的元素1进行比较,也满足条件;再将元素3与后面的元素15进行比较,不满足条件,则继续将15从数组中剔除,又得到一个新数组A3 = { 1, 2, 3, 5, 1, 4};然后将元素3与后面的元素5进行比较,满足条件;然后接着将元素5与后面的元素1进行比较,不满足条件,则继续将1从数组中剔除,又得到一个新数组A4 = { 1, 2, 3, 5, 4};然后将元素5与后面的元素4进行比较,也满足条件。
所以最终得到的新数组为:
int[] newA = { 1, 2, 3, 5, 4}; //满足条件的元素对应的索引为:0, 1, 4, 6, 8