LeetCode每日一篇

Two Sum

Given an array of integers, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

You may assume that each input would have exactly one solution.

Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

Title大意:

给定一个数组和一个目标整数,求在数组中的两个和为目标函数的下标,第一个下标要小于第二个下标(确保有且只有一个结果)

Solution:

O(n2) runtime, O(1) space – Brute force:

The brute force approach is simple. Loop through each element x and find if there is another value that equals to target – x. As finding another value requires looping through the rest of array, its runtime complexity is O(n2).

O(n) runtime, O(n) space – Hash table:

We could reduce the runtime complexity of looking up a value to O(1) using a hash map that maps a value to its index.

1.暴力破解,两个for循环,令tmp = target减去数组中的一个数,找到数组里的另一个数,时间复杂度O(n^2)

2.利用HashMap,Hash存储和查找时间O(1)

public class Solution {

public int[] twoSum(int[] nums, int target) {

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

for(int i=0;i<nums.length;i++){

map.put(nums[i], i);

}

int[] res = new int[2];

for(int i=0;i<=nums.length;i++){

int tmp = target - nums[i];

if(map.get(tmp)!=null && map.get(tmp)!=i){

res[0] = i + 1;

res[1] = map.get(tmp) + 1;

break;

}

}

return res;

}

}

时间: 2024-10-16 20:57:49

LeetCode每日一篇的相关文章

LeetCode之Easy篇 ——(13)Roman to Integer

Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 思路分析: 1.熟悉罗马数字的规则.见LeetCode之Easy篇 --(12)Integer to Roman 2.将输入的罗马数字转化成数组,并逐一通过case比对,然后根据其规则进行运算. Java代码示例: class Solution { public int romanT

Leetcode之Database篇

早晨和陈John一起来实验室的路上听他说起leetcode上也有数据库和shell的练习.于是拿来练练手,发现数据库的题只有几道而且做得也很快AC率也蛮高,权当复习了一下数据库的基本语法了吧. 1:Employees Earning More Than Their Managers The Employee table holds all employees including their managers. Every employee has an Id, and there is also

类和对象,以及 LeetCode 每日一题

所有类都是引用类型. 1 定义类 类是某一批对象的抽象. 1.1 定义类的语法: 1 [修饰符] class 类名{ 2 零到多个构造器定义 3 零到多个成员变量 4 零到多个方法 5 } 对于一个类定义而言,可以包含三种最常见的成员:构造器.成员变量.方法 修饰符可以是 public.final . abstract ,或者完全省略修饰符. 类里各成员之间的定义顺序没有任何影响,各成员之间可以相互调用,需要指出的是,static 修饰的成员不能访问没有 static 修饰的成员. 构造器用于构

LeetCode每日一题(五):加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 1: 输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123.示例 2: 输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/plus-one 思路:

【Leetcode】--数组篇--No.11--盛最多水的容器

题目: 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水. 说明:你不能倾斜容器,且 n 的值至少为 2. 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/container-with-most-water著作权归领扣网络所有.商业转载请联系官方

LeetCode每日一题(一)

1103.分糖果Ⅱ 题目: 排排坐,分糖果. 我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友. 给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n 颗糖果. 然后,我们再回到队伍的起点,给第一个小朋友 n + 1 颗糖果,第二个小朋友 n + 2 颗,依此类推,直到给最后一个小朋友 2 * n 颗糖果. 重复上述过程(每次都比上一次多给出一颗糖果,当到达队伍终点后再次从队伍起点开始),直到我们分完所有的糖果.注意

LeetCode每日一题(三)

1.两数之和 题目: 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 思路: 由于哈希查找的时间复杂度为O(1),可以利用map降低时间复杂度. 根据与target的差对数组中的数字进行映射,当出现和为target的一组数时,马上就可以返回这组数. class Solution { public int[] twoSum(int[] nums, in

LeetCode每日一题(四)

1111.有效括号的嵌套深度 题目: 有效括号字符串: 仅由 ( 和 ) 构成的字符串,对于每个左括号,都能找到与之对应的右括号,反之亦然. 下述几种情况同样属于有效括号字符串: 1. 空字符串 2. 连接,可以记作AB,其中 A 和 B 都是有效括号字符串 3. 嵌套,可以记作(A),其中 A 是有效括号字符串 嵌套深度: 类似地,我们可以定义任意有效括号字符串 s 的 嵌套深度 depth(s): 1. s 为空时,depth("") = 0 2. s 为 A 与 B 连接时,de

左手书法每日一篇