1.两数之和01
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个
整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
var twoSum = function(nums, target) {
let hash=new Map();
for(let i in nums){
let num=target-nums[i]
if(hash.has(num)){
return [hash.get(num),i]
}else{
hash.set(nums[i],i)
}
}
};
2.存在重复元素217
给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
var containsDuplicate = function(nums) {
let hash=new Map();
for(let i in nums){
if(hash.has(nums[i])){
return true
}else{
hash.set(nums[i],1)
}
}
return false
};
3.两个数组的交集349
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
ar intersection = function(nums1, nums2) {
let map1=new Set(nums1)
let map2=new Set(nums2)
let num=[]
for(let i of map1){
if(map2.has(i)){
num.push(i)
}
}
return num
};
4.独一无二出现次数1207
给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。
如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。
示例 1:输入:arr = [1,2,2,1,1,3] 输出:true 解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。
var uniqueOccurrences = function(arr) {
let map1=new Map()
let list=[]
for(let i of arr){
if (map1.has(i)){
map1.set(i,map1.get(i)+1)
}else{
map1.set(i,1)
}
}
for (let num of map1){
list.push(num[1])
}return list.length==Array.from(new Set(list)).length ? true:false
};
知识点
一、栈、队列 : 进、出
二、链表、数组 : 多个元素存储组成的
区别一:
数组:下标
链表:next指针联系在一起
区别二:数据插入
数组:如果在中间插入新的元素,其他元素会重新计算
链表:不会重新计算,说白了是赋值或者替换的一种感觉
区别三:查找
数组:通过下标进行查找即可
链表:每次查找都需要从头开始找
三、字典
字典 : 键值对存储的,类似于js的对象(键[key]都是字符串类型或者会转换成字符串类型)
字典 ==》map来表示的,map的键不会转换类型
四、哈希表 又叫===》散列表
在js中没有哈希表,哈希表是字典一种实现。
区别一:如果找key对应的value需要遍历key,那么想要省去遍历的过程,用哈希表来表示。
区别二:排列顺序
字典是根据添加的顺序进行排列的
哈希表不是添加的顺序进行排列的