一个数组有11个整数分别为1 4 1048576 16 32 64 128 256 8192 2097152 16777216写一段java代码判断整数8449能否由数组中的数字相加得到数组中的数字只能使用一次
下面是一种可能的实现方式:
public static boolean canAddUpTo8449(int[] nums) {
// 先排序,方便后面的双指针算法
Arrays.sort(nums);
// 双指针算法
int left = 0, right = nums.length - 1;
while (left < right) {
int sum = nums[left] + nums[right];
if (sum == 8449) {
return true;
} else if (sum < 8449) {
// 如果和小于8449,左指针右移
left++;
} else {
// 如果和大于8449,右指针左移
right--;
}
}
// 如果双指针算法结束后仍然没有找到符合条件的数字对,那么就返回false
return false;
}
这个方法的思路比较简单:先将数组排序,然后使用双指针算法,分别从数组的左右两端开始向中间靠拢,每次计算左右两个指针指向的数字的和,如果和等于8449,就返回true;如果和小于8449,就将左指针右移,增大和的值;如果和大于8449,就将右指针左移,减小和的值。如果左右指针重合了还没有找到符合条件的数字对,那么就返回false。
原文地址: https://www.cveoy.top/t/topic/b2wb 著作权归作者所有。请勿转载和采集!