数组理论基础
想必学过数据结构的同学都知道数组了,接下来就带大家了解一下。
1 数组的存储方式
数组是通过下标索引获取的方式到下标下对应的数据,数组是存放在内存空间的,每一个数都对应的一个相对地址。我在这里不过多的赘述了,具体的大家去查资料。
2 注意两点
· 数组下标都是从0开始的
· 数组内存空间的地址都是连续的
首先从leetcode的第一题开始说起两数之和,这一题有多种解法,我从暴力破解和HashMap两种开始讲解。
第一种双重for循环也为暴力破解
如果使用暴力破解不会 大家就想想学的冒泡算法 是不是使用双指针先确定一个依次循环然后遍历并且相加得到值进行比较。
注意返回的格式 ” new int[] {i,j} “
第二中方法 哈希表
如果对哈希表了解不是很全面,到哈希表来了解,总之算法不是一天修成,大家持之以恒终有一天会成为算法大佬(我也是菜鸟)
整个for循环我相信大家可以理解 但是对于 “ map.containsKey(target - nums[i]) ” 肯定理解不是很到位,可以到菜鸟教程了解,也可以点击我给的超链接, 注意返回的格式 ” new int[] {i,j} “ 。
hashmap.containsKey(Object key)
如果 hashMap 中存在指定的 key 对应的映射关系返回 true,否则返回 false。
public int[] twoSum(int[] nums, int target) {
第一种解法
int let = nums.length;
for(int i = 0;i < let;i++){
for(int j = i + 1; j < let; ++j){
if(nums[i]+nums[j] == target){
return new int[] {i,j};
//注意返回的形式 我第一踩的坑就是不会返回 new的数组。
}
}
}
第二种解法
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0;i<nums.length;i++){
// 如果 hashMap 中存在指定的 key 对应的映射关系返回 true,否则返回 false。
if(map.containsKey(target - nums[i])){
return new int[]{map.get(target - nums[i]),i};
}
map.put(nums[i],i);
}
return new int[2];
}
忠告大家:
· 练习算法千万不能直接复制粘贴,哪怕不会做没有思路,也千万不用复制粘贴。实在不跟着思路抄一遍,只会有益无害。