简单题
1. 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
方法 1 一个简单的实现使用了两次迭代。在第 一 次迭代中,我们将每个元素的值和它的索引添加到表中。然后,在第 二 次迭代中,我们将检查每个元素所对应的目标元素(target - nums[i] )是否存在于表中。注意,该目标元素不能是 nums[i]本身!
方法2:一遍哈希表
事实证明,我们可以一次完成。在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。如果它存在,那我们已经找到了对应解,并立即将其返回。
class Solution {
// 方法 2
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (map.containsKey(complement)) {
return new int[] { map.get(complement), i };
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("No two sum solution");
}
118. 杨辉三角
方法: 使用迭代 / 或者递归
/** 使用递归 */
public List<List<Integer>> generate(int numRows) {
//存储要返回的杨辉三角
List<List<Integer>> dg = new ArrayList<>();
//若0行,则返回空
if(numRows == 0){
return dg;
}
//递归出口,第一步!找到出口
if(numRows == 1){
dg.add(new ArrayList<>());
dg.get(0).add(1);
return dg;
}
//递归,注意返回值!!!第二步
dg = generate(numRows-1);
List<Integer> row = new ArrayList<>();
row.add(1);
for(int j = 1;j < numRows - 1;j++){
row.add(dg.get(numRows-2).get(j-1) + dg.get(numRows-2).get(j));
}
row.add(1);
dg.add(row);
return dg;
}
189. 旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数
方法1: 暴力:移动K次
方法2:使用额外的数组
方法 3:使用环状替换
方法 4:使用反转