力扣 1.24

15. 三数之和icon-default.png?t=M0H8https://leetcode-cn.com/problems/3sum/

难度中等4229

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 请你找出所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {

            vector<vector<int>>result;
            sort(nums.begin(),nums.end());
            for(int i=0;i<nums.size();i++){


                if(nums[i]>0){
                    return result;
                }
                if(i>0&&nums[i]==nums[i-1]){
                    continue;
                }
                int left = i+1;
                int right = nums.size()-1;
                while(left<right){

                    if(nums[i]+nums[left]+nums[right]>0){
                        right--;
                    }
                    else if(nums[i]+nums[left]+nums[right]<0){
                        left++;
                    }
                    else{
                        result.push_back(vector<int> {nums[i],nums[left],nums[right]});
                        while(right>left&&nums[left]==nums[left+1]) left++;
                        while(right>left&&nums[right]==nums[right-1]) right--;
                        left++;
                        right--;
                    }


                }
            }

            return result;

    }
};

18. 四数之和icon-default.png?t=M0H8https://leetcode-cn.com/problems/4sum/

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

0 <= a, b, c, d < n
a、b、c 和 d 互不相同
nums[a] + nums[b] + nums[c] + nums[d] == target
你可以按 任意顺序 返回答案

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        vector<vector<int>> result;
        sort(nums.begin(),nums.end());
        for(int k = 0;k<nums.size();k++){
            if(k>0&&nums[k]==nums[k-1]){
                continue;
            }
            for(int i = k+1;i<nums.size();i++){
            if(i>k+1&&nums[i]==nums[i-1]){
                continue;
            }
            int left = i+1;
            int right = nums.size()-1;
            while(left<right){
            if(nums[k]+nums[i]>target-(nums[left]+nums[right])){
                right--;
            }
            else if(nums[k]+nums[i]<target-(+nums[left]+nums[right])){
                left++;
            }
            else{
                result.push_back(vector<int>{nums[k],nums[i],nums[left],nums[right]});
                while(left<right&&nums[right]==nums[right-1]){
                    right--;
                }
                 while(left<right&&nums[left]==nums[left+1]){
                    left++;
                }
                left++;
                right--;
            }
            }

            }
        }
        return result;
    }
};

两道题非常相似

### 如何使用力扣平台 #### 平台概述 力扣是一个专注于算法和数据结构练习的学习平台,提供了丰富的题目资源以及在线评测功能。通过该平台,用户能够针对不同难度级别的题目进行训练,从而提高自身的编程能力和逻辑思维能力。 #### 刷题策略建议 为了高效利用时间并取得更好的学习效果,在力扣上刷题时可以选择特定范围内的高质量题目集中攻克。例如,优先完成前200道经典题目是非常明智的选择[^1]。这些题目涵盖了大部分基础知识点,并且与HOT 100榜单中的高频考点高度吻合。 #### 数据结构专项练习 对于某些具体的数据结构领域如链表操作,则可以通过专门挑选一系列相关联的经典习题来进行深入研究。比如下面列举了一些典型的关于链表处理方面的挑战编号列表供参考[^2]: - 反转单链表 (No. 206) - 移除链表元素 (No. 203) #### 实际案例解析 以一道具体的加油站在环路上行驶场景为例说明如何应用动态规划或者模拟法解决问题。假设存在一组加油站及其对应的燃油供应量数组gas[]及消耗成本数组cost[], 我们要找到一个起点使得车辆能顺利完成一圈旅行而不会中途耗尽燃料。以下是基于上述描述的一个解决方案思路[^3]: ```python def canCompleteCircuit(gas, cost): n = len(gas) total_tank, curr_tank = 0, 0 starting_station = 0 for i in range(n): total_tank += gas[i] - cost[i] curr_tank += gas[i] - cost[i] if curr_tank < 0: starting_station = i + 1 curr_tank = 0 return starting_station if total_tank >= 0 else -1 ``` #### 职业发展导向 另外值得注意的是,除了个人兴趣驱动外,很多人也会因为求职需求加入到每日打卡刷题大军之中。确实如此,无论是BAT还是其他知名互联网公司都会把候选人的算法功底当作重要考核指标之一[^4]。因此合理安排复习计划显得尤为重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值