一、双指针算法思想
双指针算法主要用于处理数组、链表等线性数据结构中的问题。它通过设置两个指针,在数据结构上进行遍历和操作,从而实现高效解决问题。
二、算法题精讲
2.1. 查找总价格为目标值的两个商品
我们优先想到的是暴力解法:利用两层 for 循环来检验两个数的和是否为目标值。那么此时的时间复杂度为 O(n^2)。
class Solution {
public int[] twoSum(int[] price, int target) {
int len = price.length;
for(int i=0;i<len;i++){
for(int j=i+1;j<len;j++){
if(price[i]+price[j] == target){
return new int[]{price[i],price[j]};
}
}
}
return new int[0];
}
}
但题目当中给出数组是按照升序排列的,那么我们就可以利用单调性定义左右两个指针来遍历数组。我们先定义一个 sum 变量,sum 的值等于左右指针所指的值之和。然后通过 sum 与 target 的比较,如果 sum 小于 target,则左指针向右移动;如果 sum 大于 target,则右指针向左移动;如果 sum 等于 target,则返回两个数。

完整代码实现:
class Solution {
public int[] twoSum(int[] price, int target) {
int len = price.length;
int left ,right = len-;
(left < right){
price[left] + price[right];
(sum < target){
left++;
} (sum > target) {
right--;
}{
[]{price[left],price[right]};
}
}
[];
}
}






