leetcode之 两数之和 题目解答C/python

leetcode之 两数之和 题目解答C/python题目描述链接:https://leetcode-cn.com/problems/two-sum给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定nums=[2,7,11,15],target=9因为nums[0]+nums[1]=2+7=9所以返回[0,1]解答C语言:…

大家好,又见面了,我是你们的朋友全栈君。

题目描述

链接:https://leetcode-cn.com/problems/two-sum

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

 

解答

C:

首先搞清楚函数中的形参的意思: int* nums表示传进去一个数组的地址; int numsSize表示传进去的数组大小; int target表示数组中两数相加需要等于的值; int* returnSize表示返回的数组的大小。

数组nums的index从0到numsSize-1,因此使用非常常见的双循环嵌套方法。i从0到numsSize-2, j从0到numsSize-1去遍历,一旦发现 nums[i]+nums[j] 和 target 相等,就保存i,j,输出结果。

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */

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

执行结果:

通过

显示详情

执行用时:4 ms, 在所有 C 提交中击败了99.03%的用户

内存消耗:6 MB, 在所有 C 提交中击败了51.84%的用户

 

python

方法1:一个菜鸟的不计成本的方法。定义一个空字典full_dict,然后把nums列表里任意两项都做相加。相加之和值作为key ,两项以列表形式合并作为value。将nums所有项的遍历一遍后,就产生了涵盖所有和值得full_dict字典,取key为target的value即为本题答案。

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        full_dict = {}
        dict_key = 0
        for i in range(0, len(nums)):
            for j in range(0, len(nums)):
                if j == i:
                    continue
                dict_key = nums[i]+nums[j]
                full_dict.update({dict_key:[j, i]})
        return full_dict[target]

 

执行结果:

超出时间限制

方法2:这个方法比方法1巧妙多了。定义了一个字典hashmap = {}用于由值来获取索引。对列表nums遍历,取出每一项索引和数值,计算可以与该值求和得到target的另外一个值的大小,并搜索是否在nums里,如果是则将符合条件的两个值得索引打印出来。

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        hashmap = {}
        print "step 1"
        for index, num in enumerate(nums):
            print "step 2 index:", index
            print "step 2 num:", num 
            another_num = target - num
            print  "step 3 another_num:",another_num
            if another_num in hashmap:
                return [hashmap[another_num], index]
            hashmap[num] = index
        return None

执行结果:

通过

显示详情

执行结果:

通过

显示详情

执行用时:8 ms, 在所有 Python 提交中击败了99.74%的用户

内存消耗:13 MB, 在所有 Python 提交中击败了89.92%的用户

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138850.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • net share列出了Windows的默认共享(包括C盘)[通俗易懂]

    开启共享方法:命令行方式:netshare博客=F:\娱乐\种子我设置了一个名为“博客”的共享,路径为:“F:\娱乐\种子”。 GUI方式:找到“F:\娱乐”的“种子”文件夹,点击右键,找到属性的共享标签,根据提示进行设置即可。相对简单不再骜述。如果无法共享你的文件夹,或文件夹属性里找不到共享标签。请参看下面两条:无法共享:确保你的Server、Workstation两个服务处于开启状态。在运行里输入Services.msc打开服务管理器,找到上述服务,设置为自动,并启动相应服务。 找不

    2022年4月15日
    59
  • Python.win32gui.获取窗体「建议收藏」

    Python.win32gui.获取窗体「建议收藏」importwin32gui,win32conimportpyautoguiaspg#自己的库fromastd.lib.astd_funcimportfind_pic#窗体标题,用spy++获取wdname=’傲视天地-1-5合区-360游戏中心-MozillaFirefox’#None表示从最顶层桌面找起,如果未找到返回0#从顶层窗口向下搜索主窗…

    2025年7月4日
    3
  • VMware虚拟机下Centos8 设置静态IP地址

    VMware虚拟机下Centos8设置静态IP地址,如何做?

    2022年2月16日
    94
  • 新视野大学英语(第三版)读写教程4答案

    新视野大学英语(第三版)读写教程4答案Unit1TextATextA.Languagefocus1.crumbled2.discern3.surpass4.shrewd5.conversion6.distort7.radiant8.Ingenious9.propositionTextA:LanguagefocusWordbuildingPractice1delicacybankruptcyac…

    2022年6月14日
    38
  • 安装Orchard

    安装Orchard安装 Orchard 有 4 种方式安装 Orchard 使用 MicrosoftWeb 安装使用 MicrosoftWeb 安装 见在 WebMatrix 中开发 Orchard 下载 Orchard zip 文件 见使用压缩文件手动安装 Orchard 获取源码使用命令行或 VisualStudio 编译 Orchard

    2025年12月6日
    3
  • 初学者该掌握的计算机知识,初学者该如何学习电脑知识

    初学者该掌握的计算机知识,初学者该如何学习电脑知识看到不少刚入门的电脑刚入门者找不到适合自己的学习方法,到处碰壁,那么呢?接下来大家跟着小编一起来了解一下学习电脑知识的解决方法吧。初学者学习电脑知识方法第一阶段:鼠标和键盘的操作鼠标的操作主要是:移动、拖动、单击、双击和右击,知道鼠标的作用以及基本操作。掌握键盘的操作,可以通过打字练习来完成,熟悉键盘排列,可以熟练打字。第二阶段:操作系统的学习对windowsxp的了解,知道xp系统有哪些基本功…

    2022年6月15日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号