一、数组
数组,是有序的元素序列,组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。 这些无序排列的同类数据**元素的集合称为数组。
区别于结构和类中的字段,数组中的所有元素都具有相同类型(这一点和结构或类中的字段不同,它们可以是不同类型)。数组中的元素存储在一个连续性的内存块中,并通过索引来访问(这一点也和结构和类中的字段不同,它们通过名称来访问)。
哈希表
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。
通过散列函数,数据元素将被更快地定位。
二、关于leetcode中的两个例题
01、两数之和
答案:
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
hashmap = {}
for index, num in enumerate(nums):
another_num = target - num
if another_num in hashmap:
return [hashmap[another_num], index]
hashmap[num] = index
return None
分析:解决这个问题的整体思路一般两种吧,一种就是挨个遍历看看和是否等于target;另一种就是对每个值求出准确值,把list里面的num和index里面是否存有我们想要的答案
202、快乐数
答案:
class Solution:
def __init__(self):
self.hash_dic = {}
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
sums = sum(map(lambda x:x**2,map(int,str(n))))
if sums == 1:
return True
if sums in self.hash_dic:
return False
else:
self.hash_dic[sums] = 0
return self.isHappy(sums)
**分析:**面对快乐数这个问题,关键点应该是not happynum,然后递归思想。我们在这个过程用到了一个很长的sum函数最外层的sum不说了,第一层map是对map执行lambda 这样一个操作,第二个map是把数字拆分成一个个单独的数字。