相向双指针

LCR 006. 两数之和 II - 输入有序数组

代码

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int n = nums.size();
        int l = 0, r = n - 1;
        while(l < r){
            int x = nums[l] + nums[r];
            if(x < target)l++;
            else if(x > target)r--;
            else{
                return {l,r};
            }
        }
        return {};
    }
};

15. 三数之和

代码

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        int n = nums.size();
        vector<vector<int>> ans;
        for(int i = 0; i < n - 2; i++){//因为要给另外两个元素预留出空间,所以要< n - 2
            if(i && nums[i] == nums[i - 1])continue;//防止重复三元组
            if(nums[i] + nums[i + 1] + nums[i + 2] > 0)continue;
            if(nums[i] + nums[n - 1] + nums[n - 2] < 0)continue;
            int l = i + 1, r = n - 1;
            while(l < r){
                int x = nums[i] + nums[l] + nums[r];
                if(x < 0) l++;
                else if(x > 0) r--;
                else if(x == 0 && l < r){
                ans.push_back({nums[i],nums[l],nums[r]});     
                l++;
                while(l < r && nums[l] == nums[l - 1])l++;
                r--;
                while(l < r && nums[r] == nums[r + 1])r--;
                }
            }
        }
        return ans;
    }
};

11. 盛最多水的容器

代码

class Solution {
    //相向双指针
    //两个指针分列两边
    //每次均移动短板,移动长板结果不明,总移动短板可以增大
    //每轮移动短板不会导致最大值状态丢失
public:
    int maxArea(vector<int>& height) {
        int l = 0, r = height.size() - 1;
        int ans = 0;
        while(l < r){
            height[l] < height[r] ? ans = max(ans,(r - l) * height[l++]) : ans = max(ans,(r - l) * height[r--]) ;
        }    
        return ans;
    }
};

42. 接雨水

代码

class Solution {
public:
    int trap(vector<int>& height) {
        int ans = 0, l = 0, r = height.size() - 1;
        int lmax = 0, rmax = 0;
        while(l < r){
            lmax = max(lmax,height[l]);
            rmax = max(rmax,height[r]);
            ans += lmax < rmax ? lmax - height[l++] : rmax - height[r--];
        }
        return ans;
    }
};

相关推荐

  1. 指针

    2024-03-22 04:42:05       33 阅读
  2. 指针题单

    2024-03-22 04:42:05       57 阅读
  3. [leetcode 指针]

    2024-03-22 04:42:05       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-22 04:42:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-22 04:42:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-22 04:42:05       82 阅读
  4. Python语言-面向对象

    2024-03-22 04:42:05       91 阅读

热门阅读

  1. RabbitMQ docker 单机部署

    2024-03-22 04:42:05       44 阅读
  2. vue绑定key

    2024-03-22 04:42:05       39 阅读
  3. AGI的数据驱动:挖掘海量信息的价值与智慧

    2024-03-22 04:42:05       45 阅读
  4. Mysql批量更新: on duplicate key update

    2024-03-22 04:42:05       45 阅读
  5. [蓝桥杯2012] 罗马数字

    2024-03-22 04:42:05       41 阅读
  6. sqllab第29-33通关笔记

    2024-03-22 04:42:05       44 阅读
  7. [AIGC] Apache HTTP服务器:历史与使用

    2024-03-22 04:42:05       37 阅读
  8. 安卓面试题多线程 121-125

    2024-03-22 04:42:05       37 阅读