当前位置: 首页 > news >正文

力扣Leetcode:1. 两数之和(C++、Python、Java)

题目描述

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

题解

用空间换时间,使用一个字典,键为元素值,值为元素下标。

遍历数组中的所有元素,对于nums[i],只需要检查字典中是否存在target-nmums[i]即可。

以下分别使用了C++、Python、Java实现了这一算法,主要在于不同语言对于map的使用方式。个人感觉Python最为简单易用。

Python代码

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        dic={}
        for i in range(len(nums)):
            if target-nums[i] in dic and i != dic[target-nums[i]]:
                return [dic[target-nums[i]],i]
            dic[nums[i]]=i
        return [None,None]

Java代码

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

C++代码

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
		unordered_map<int, int> m;
		vector<int> rs;
		for(int i=0; i<nums.size(); i++) {
			if(m.find(target-nums[i])!=m.end() && m[target-nums[i]]!=i) {
                rs.push_back(m[target-nums[i]]);
				rs.push_back(i);
				return rs;
			} else {
				m[nums[i]]=i;
			}
		}
		return rs;
    }
};

相关文章:

  • 最长公共子序列
  • 国科大.图像处理.期末复习笔记手稿
  • 喝茶减少电脑对自身的伤害
  • 2020计算机专业保研夏令营面经:南科大计算机
  • 无耻的愤怒
  • 力扣Leetcode:2. 两数相加(C++、Python、Java)
  • 解决jsp程序不直接、代码与UI混杂的痛: JSPWidget
  • Python TypeError: unsupported operand type(s) for /: ‘list‘ and ‘int‘
  • Hello,.NET Compact Framework 2.0(二)
  • 力扣Leetcode:4. 寻找两个正序数组的中位数(Python)
  • Smart Client Case Study Source Code Download from MSDN China
  • 力扣Leetcode:5. 最长回文子串(Python)
  • 古诗词推荐(一):春风十里扬州路,卷上珠帘总不如
  • 终于签完了
  • 古诗词推荐(二):若似月轮终皎洁,不辞冰雪为卿热
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Brief introduction of how to 'Call, Apply and Bind'
  • eclipse(luna)创建web工程
  • ECS应用管理最佳实践
  • go append函数以及写入
  • Node 版本管理
  • 代理模式
  • 多线程 start 和 run 方法到底有什么区别?
  • 分类模型——Logistics Regression
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 用简单代码看卷积组块发展
  • 鱼骨图 - 如何绘制?
  • ###C语言程序设计-----C语言学习(6)#
  • #define与typedef区别
  • #前后端分离# 头条发布系统
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (02)Hive SQL编译成MapReduce任务的过程
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)计算机毕业设计ssm电影分享网站
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (规划)24届春招和25届暑假实习路线准备规划
  • (四)Android布局类型(线性布局LinearLayout)
  • (一)基于IDEA的JAVA基础1
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .net 发送邮件
  • .Net 知识杂记
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .net下的富文本编辑器FCKeditor的配置方法
  • [ C++ ] STL---string类的使用指南
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [BJDCTF2020]The mystery of ip
  • [BZOJ] 2044: 三维导弹拦截
  • [CVPR2021]Birds of a Feather: Capturing Avian Shape Models from Images
  • [ios-必看] IOS调试技巧:当程序崩溃的时候怎么办 iphone IOS
  • [javaSE] GUI(事件监听机制)
  • [LeetCode]Max Points on a Line