算法题小点
找到数组中的两个数,和是target
先排序,然后利用双指针
public int[] twoSum(int[] nums, int target) {
Arrays.sort(nums);
int left = 0, right = nums.length - 1;
while (left < right) {
int sum = nums[left] + nums[right];
if (sum < target) {
left++;
} else if (sum > target) {
right--;
} else {
return new int[]{nums[left], nums[right]};
}
}
return new int[]{};
}
比较两个数组大小
/**
* 比较两个数组大小
* @param arr1 数组1
* @param arr2 数组2
* @param p1 数组1的起始位置
* @param p2 数组2的起始位置
*/
public int compareList(List<Integer> arr1, List<Integer> arr2, int p1, int p2) {
int len1 = arr1.size(), len2 = arr2.size();
while (p1 < len1 && p2 < len2) {
if (!arr1.get(p1).equals(arr2.get(p2))) {
return arr1.get(p1) - arr2.get(p2);
}
p1++;
p2++;
}
return len1 - len2;
}
合并两个数组,形成一个最大或最小数组
/**
* 合并两个数组,形成一个最大或最小数组
*/
public List<Integer> merge(List<Integer> arr1, List<Integer> arr2) {
List<Integer> res = new ArrayList<>();
int len1 = arr1.size();
int len2 = arr2.size();
int p1 = 0, p2 = 0;
while (p1 < len1 && p2 < len2) {
//这里不能单纯地判断一个值的大小,应当判断整个数组的大小
if (compareList(arr1, arr2, p1, p2) > 0) {
res.add(arr1.get(p1++));
} else {
res.add(arr2.get(p2++));
}
}
while (p1 < len1) res.add(arr1.get(p1++));
while (p2 < len2) res.add(arr2.get(p2++));
return res;
}
Comments | 0 条评论