如果可以有3个数成等差数列 打印出来
否则没有打印no
先从小到大排序,然后三重循环
结果:1487 4817 8147
public void test() {
//已排序数列
int[] nums = new int[]{1487, 1847, 4817, 4871, 7481, 7841, 8147, 8741};
List<List<Integer>> results = new ArrayList<>();
for (int i = 0; i < nums.length - 2; i ++) {
for (int j = i + 1; j < nums.length - 1; j ++) {
for (int k = j + 1; k < nums.length; k ++) {
if (nums[k] - nums[j] == nums[j] - nums[i]) { //是等差数列
List<Integer> result = new ArrayList<>();
result.add(nums[i]);
result.add(nums[j]);
result.add(nums[k]);
results.add(result);
System.out.printf("%d %d %d\n", nums[i], nums[j], nums[k]);
break;
} else if (nums[k] - nums[j] > nums[j] - nums[i]) { //第三个数已大于等差数列数,跳出本层循环
break;
}
}
}
}
if (results.size() == 0) { //无适配结果
System.out.println("no");
}
}
结果:1487 4817 8147
public void test() {
//已排序数列
int[] nums = new int[]{1487, 1847, 4817, 4871, 7481, 7841, 8147, 8741};
List<List<Integer>> results = new ArrayList<>();
for (int i = 0; i < nums.length - 2; i ++) {
for (int j = i + 1; j < nums.length - 1; j ++) {
for (int k = j + 1; k < nums.length; k ++) {
if (nums[k] - nums[j] == nums[j] - nums[i]) { //是等差数列
List<Integer> result = new ArrayList<>();
result.add(nums[i]);
result.add(nums[j]);
result.add(nums[k]);
results.add(result);
System.out.printf("%d %d %d\n", nums[i], nums[j], nums[k]);
break;
} else if (nums[k] - nums[j] > nums[j] - nums[i]) { //第三个数已大于等差数列数,跳出本层循环
break;
}
}
}
}
if (results.size() == 0) { //无适配结果
System.out.println("no");
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2020-07-29
python暴力解法 不存在