LeetCode学习日记(第一天) (1、两数求和)

加油加油!

两种代码解决一下子:

目录

一、题目:

二、C++代码 

思路:

代码:

三、python代码:

方法:

代码:


一、题目

二、C++代码 

思路:

  1. 必须是一个有序数组,将这个数组当作升序数组来解决问题。
  2. 需要双指针移动。左指针记为a[L],右指针为a[R]

会出现三种情况:

  1. a[R]+a[L]=t #t指的是目标数字
  2. a[R]+a[L]<t,需要左指针右移动
  3. a[R]+a[L]>t,需要右指针左移动。

在两个指针到一定位置之后,不需要回退。

代码:

class Solution{
    public: 
    vector<int> twoSum(vector<int>&a,int t){
        int n=a.size();
        //映射
        vector<int> idxs;
        //.vector<int>idxs 创建一个动态数组idxs
        for(int i=0;i<n;i++) idxs.push_back(i);
        //不能直接排序a
        sort(idex.begin(),idex.end(),[a,idex](int i,int j){
            return a[idxs[i]]<a[idxs[j]];
        });
        int l=0,r=n-1;
        vector<int>ret;//定义一个容器ret
        while(l<r){
            int sum=a[idxs[l]]=a[idxs[r]];
            if(sum==t){
            ret.push_back(idxs[l]);
            ret.push_back(idxs[r]);
            break;
            }else if(sum<t){
                l++
            }else{
                r--
            }
        }
        return ret;
    }
}

三、python代码:

方法:

暴力破解:最容易想到的方法是枚举数组中的每一个数 x,寻找数组中是否存在 target - x。当我们使用遍历整个数组的方式寻找 target - x 时,需要注意到每一个位于 x 之前的元素都已经和 x 匹配过,因此不需要再进行匹配。而每一个元素不能被使用两次,所以我们只需要在 x 后面的元素中寻找 target - x

代码:

class Solution(object):
    def twoSum(self, nums, target):
        n = len(nums)  # 列表总长度
        for i in range(n):
            for j in range(i+1, n):  # i以前值省略
                if nums[i] + nums[j] == target:
                    return [i, j]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值