LeetCode 1.两数之和

原因:

大三了,感觉自己是个废柴。点进LeetCode纯粹是因为生活所迫,并不是自己对这个玩意儿多有兴趣。写博客也仅仅是为了自己以后遇到类似的东西的时候,能找到代码看看(脑袋瓜子不太好用)。这篇文章是第一篇,也很可能是最后一篇,看我心情还想不想写吧。如果其中有什么问题,也希望看的人能告诉我,大家一起互相学习嘛。
数据结构学的很菜,还在慢慢重新学,学会了会更新更好的算法滴

语言选择:

C语言、Python

正题:

相关知识概念:

时间复杂度:

啊这。这是数据结构里面的内容,说实话当我看见他们LeetCode里面都在说自己项目的时间复杂度的时候,就感觉自己学的都还给老师了。
话不多说,链接自己进去慢慢看,用的别人的博客,如果有用,记得感谢
(数据结构)十分钟搞定时间复杂度(算法的时间复杂度)
其实在看完之后,就感觉再看代码能看出他的复杂度,但是让我慢慢说为啥,可能又说不出来,还是懂的不深。不过循环这个地方,简单理解就是循环一次就是1,循环n次就是n,循环里面套循环就是n*m(m为第二个循环的次数)。这个只包括常数阶,线性阶和平方阶。其他的遇到了再学吧(懒啊)

代码

C语言——暴力破解

选择C语言之后的提示代码:

int* twoSum(int* nums, int numsSize, int target, int* returnSize){

}

*nums:给定的整数数组
numSize:整数数组的大小
target:给定的整数目标值
*returnSize:返回数组的大小

int* twoSum(int* nums, int numsSize, int target, int* returnSize){
  for(int i=0;i<numsSize-1;i++)                     
    {
        for(int j=i+1;j<numsSize;j++)                   
        {
            if(nums[i]+nums[j]==target)                
            {
                int *moment = (int*)malloc(sizeof(int)*2);    
                moment[0]=i;                                 
                moment[1]=j;
                *returnSize=2;                         
                return moment;                          
            }
        }
    }
    return 0;
}

第一次循环选择numsSize-1是因为题目中说明,同一个数字不能使用两遍,如果只是在第二次循环后面添加一个if(i != j)明显是不能满足题干要求的。那么只能让j在i前面,也就是j要比i更大,同时j能达到最后一位而i不能达到,这样就能去掉最后一个数多次使用的可能性了。

代码运行时间内存消耗时间复杂度
两个循环解决4 ms5.8MO(n^2)

Python——字典

代码:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashtable = dict()
        # enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标
        for i, num in enumerate(nums): 
        # 判断字典中的key是否存在
            if target - num in hashtable:
            	# 需要返回的结果为两个数据下标
                return [hashtable[target - num], i]
            # 将之前的值存为key,数据下标存为值
            hashtable[nums[i]] = i
        return []

结果分析:

代码运行时间内存消耗时间复杂度
python40 ms14.9MO(n)

总结

我坦白,代码是看的LeetCode官方的代码。本来第二个应该用C语言写哈希表,但是我直说,我不会用C写哈希表,我忘了,看着官方给的好复杂啊。唉,C语言果然不是我的强项。python只是用了简单的字典,但是感觉还是很垃圾的样子。下一次再写LeetCode,坚决不看别人的了,自己肝。主要是以学习为主,总是看别人的总会忘。下次的东西将会是自己努力的成果(如果没有努力,可能就没有下次(手动狗头保命))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值