1. 两数之和
难度简单16142
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
📌解题思路:
利用哈希表存储查找过的数组。
类似于滑动窗口,for边循环边对照着哈希表中搜寻是否有想要的值。
👇Java版本答案
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] res=new int[2];
if(nums==null||nums.length==0){
return res;
}
Map<Integer,Integer>map=new HashMap<>();
for(int i=0;i<nums.length;i++){
int temp=target-nums[i];
if(map.containsKey(temp)){
res[1]=i;
res[0]=map.get(temp);
}
map.put(nums[i],i);
}
return res;
}
}
👇C++版本答案:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
std::unordered_map <int,int> map;
for(int i=0;i<nums.size();i++){
auto iter=map.find(target-nums[i]);
if(iter!=map.end()){
return {iter->second,i};
}
map.insert(pair<int,int>(nums[i],i));
}
return {};
}
};
😊我学会了:
java中map.containsKey(key)方法是查找map中是否有key值
java中map.get(key)方法是得到key值对于的下标
java中map.put(key,value)存入键值对
java创建哈希表:Map<int,int>map=new HashMap<>()
c++中map.find(key)方法查找map中是否有key,有返回true,没有返回false
c++中map.insert({key,value})插入键值对
c++中
88. 合并两个有序数组
难度简单1706
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况, nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。 nums2 的长度为 n 。
📌解题思路:
将第二数组存放在第一个数组中
sort排序
👇Java版本答案:
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
for(int i=0;i!=n;i++){
nums1[i+m]=nums2[i];
}
Arrays.sort(nums1);
}
}
👇C++版本答案:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
for(int i=0;i!=n;i++){
nums1[i+m]=nums2[i];
}
sort(nums1.begin(),nums1.end());
}
};
😊我学会了:
java利用sort排序形式是:Arrays.sort(nums);
c++利用sort排序形式是:sort(nums.begin(),nums.end());