研究生已经上了四个月有余,终于决定要写点东西了。
以往觉得写作和我的生活肯定没有任何交集。但是最近通过和朋友的交流加上自己对生活的一些感悟,让我觉得,记录生活中的点点滴滴是每个人生命的义务之一。不管是知识,或是生活中的小感悟,它们都不仅能够让我们得到温故而知新的感觉,更能让自己在记录这件事本身不经意间得到某种意义的升华。
我选择从最近一直在做的一件事开始,那就是刷Leetcode上的题目。总的来说,这个程序员人尽皆知的网站上的题目,有难有易,有些让人绞尽脑汁,有些也能很快解出来。但是很大一部分时间,我是从别人那里汲取到智慧的养分,然后拍案叫绝而题解的。今天写这些东西,是因为我希望我也能很开心地做一个传递者,把Eureka的瞬间传递给尽量多的人,同时也让自己回顾之前的一些东西,避免遗忘,也方便以后自己查找。那么,现在开始吧。
(一部分程序用python,一部分用java,按照题号来)
1.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
大意给出一个数字target,并在一个数组里找到两个数的加和正好等于target,并返回这两个数所在的index(注意index要加1)。
这个题目最简单的解法就是建立一个字典,并循环数组中每个元素,把target - nums[i](当前访问元素的值)作为字典的key,当前的index作为该key的value。同时,如果访问到的元素已经在字典中作为key存在,说明这个值正好等于之前target - nums[i]的值,返回两个index即可。
# python code:
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
d = {}
for i in range(0,len(nums)):
if nums[i] in d:
return [d[nums[i]], i + 1]
else:
d[target - nums[i]] = i + 1
当然这道题还有其他解法,在后面有3 sum,还有 3sum closest还会介绍。