LeetCode打卡Day3

我又回来了,回来打卡LeetCode,第一天抄了,第二天水了,隔了大半个月我来搞第三天的卡,唉,随缘努力,工作你加加油,找找我啊。

今天做第一题:1. 两数之和

看着标得简单,我不知如何下手,脑子里只有暴力穷举,哭了,我真的是个研究生吗?大学四年学没了😭

1、自己解题,直接粗暴求解

循环套循环,确定一个数然后另一个数不断相加,判断是否等于target,若等于则结束循环。毫无技巧可言啊(这里用了C++)

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> index(2);
        int l = nums.size();
        for(int i=0; i<l; i++){
            for (int j=i+1; j<l; j++){    //j<i的部分在之前的循环已经进行过计算
                if(nums[i]+nums[j]==target){
                    index[0]=i;
                    index[1]=j;
                }
            }
        }
        return index;
    }
};

下面是这道题当时的提交结果

 

2、在解答区看别人解题

用到了哈希表,边循环边找,真聪明,我怎么就想不到呢,慢慢来吧,题做多了背也该背会了吧😂,这里用了Java编码。在一遍循环的过程中,同时记录了每个元素的下标和为达到目标值需要的另一个元素,一遍循环就可以完成,🐂(微软输入法这个牛的表情包着实丑了点)。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] index=new int[2];
        HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>();
        for(int i=0; i<nums.length; i++){
            if(hash.containsKey(nums[i])){
                index[0] = hash.get(nums[i]);
                index[1] = i;
                break;
            }
            hash.put(target-nums[i],i);
        }
        return index;
    }
}

以下是提交结果,性能明显提升了好多啊,不过有一说一Java真的好耗内存啊(之前从来没感觉这么明显过)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值