☘前言☘
开更五月集训专题,由浅入深,深入浅出,飞向大厂!
🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人
✨联系方式:2201891280(QQ)
⏳全文大约阅读时间: 20min
全文目录
2016. 增量元素之间的最大差值
解题思路
利用前缀最小值进行遍历一遍就ok了。
代码
class Solution {
public:
int maximumDifference(vector<int>& nums) {
int ans = -1, n = nums.size(),qianzuimin = nums[0];
for(int i = 1;i < n;++i){
if(nums[i] - qianzuimin > 0) ans = max(ans,nums[i] - qianzuimin);//统计结果
qianzuimin = min(qianzuimin,nums[i]);//更新前缀最小值
}
return ans;
}
};
注意的点
- 先将nums的
size
进行保存,防止每次就都调用浪费时间 - 每次都直接赋值,省了分支语句加快速度
- 其实前缀最小值先计算还是后计算不影响结果,因为要求是绝对的大于,如果是大于等于就会有影响。
2239. 找到最接近 0 的数字
解题思路
简单模拟,不过说了要用c++,用用auto遍历的方式。
代码
class Solution {
public:
int findClosestNumber(vector<int>& nums) {
int ans = 100001;
for(auto num : nums){
int tmp = num > 0 ? num : -num;
if(tmp < abs(ans)) ans = num;
else if(tmp == abs(ans) && num > ans) ans = num;
}
return ans;
}
};
注意的点
- 使用
:
的形式进行遍历,比较省事。 - 要求返回的是值,要看清题呀。
1475. 商品折扣后的最终价格
解题思路
典型单调栈问题,为了省空间,省时间,输入数组直接改0.0
代码
class Solution {
public:
vector<int> finalPrices(vector<int>& prices) {
stack<int> zhan;
int n = prices.size();
for(int i = 0;i < n;++i){
while(!zhan.empty() && prices[zhan.top()] >= prices[i] ){
int tmp = zhan.top();
prices[tmp] -= prices[i];
zhan.pop();
}
zhan.push(i);
}
return prices;
}
};
注意的点
- C++的
pop
返回值是void
,这有点离谱,不返回出栈元素。。。 - 使用
n
来避免重复取内存,tmp
同理。
2248. 多个数组求交集
解题思路
因为都不相同,直接统计出现次数,然后如果出现次数等于数组行数就是结果。
代码
class Solution {
public:
vector<int> intersection(vector<vector<int>>& nums) {
vector<int> ans;
map<int, int> map;
for(auto numcol : nums)
for(auto num : numcol) ++map[num];
for(auto iter : map)
if(iter.second == nums.size())
ans.push_back(iter.first);
return ans;
}
};
注意的点
- C++的挺好的点就是懒得写类型就
auto
。。。
写在最后
今天成功练习了vector
、map
,c++的stl
学习进度++。0.0