当前位置: 首页 > wzjs >正文

自己怎么做独立外贸网站培训总结怎么写

自己怎么做独立外贸网站,培训总结怎么写,怎么做网站赚钱,重庆网站建设尚智逢源⭐️个人主页:小羊 ⭐️所属专栏:LeetCode 热题 100 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 子串和为 K 的子数组滑动窗口最大值最小覆盖子串 普通数组最大子数组和合并区间轮转数组除自身以外数组的乘积缺失的…
头像
⭐️个人主页:@小羊
⭐️所属专栏:LeetCode 热题 100
很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~

动图描述

目录

    • 子串
      • 和为 K 的子数组
      • 滑动窗口最大值
      • 最小覆盖子串
    • 普通数组
      • 最大子数组和
      • 合并区间
      • 轮转数组
      • 除自身以外数组的乘积
      • 缺失的第一个正数


子串

和为 K 的子数组

  • 和为 K 的子数组

在这里插入图片描述

class Solution {
public:int subarraySum(vector<int>& nums, int k) {unordered_map<int, int> hash;hash[0] = 1;int pre = 0, res = 0;for (auto e : nums){pre += e;res += hash[pre - k];hash[pre]++;}return res;}
};

滑动窗口最大值

  • 滑动窗口最大值

在这里插入图片描述

看完这个题很容易想到用优先级队列,但是我写了一半突然意识到,当左侧出窗口时优先级队列好像无法立马找到这个值并删除,所以就放弃了这个想法;
于是就又想到set也能排序,通过 rbegin() 返回最大值对应的迭代器,但是数组中可能会出现重复的数,而set会去重,所以就又想到 multiset,它可以真正意义上的排序。
但是测试了一下发现AC不了,又想到 multiset 虽然不去重,但是 erase 会把所有相同的值都删除,所以这个办法好像又不行;
但是又突然想到之前学习 multiset 的时候测试过不同的 erase 删除,发现传值、传迭代器、传迭代器区间,最后的结果是不同的。其中传值和传迭代器区间会把所有相同的值都删除,而传迭代器的话只会删除一个。
于是又测试了一下,终于过了。但是N*logN的时间负责度居然才击败了百分之5的用户🤡

class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {vector<int> res;multiset<int> hash;for (int l = 0, r = 0; r < nums.size(); r++) {hash.insert(nums[r]);if (r - l + 1 == k){res.push_back(*hash.rbegin());hash.erase(hash.find(nums[l++]));}}return res;}
};

这位兄弟在官方题解下大彻大悟,我要是有他一半悟性就好了哈哈…
在这里插入图片描述

下面是看了官解才学到的方法,对嘛,用键值对绑定起来不就能找到了。

class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {vector<int> res;priority_queue<pair<int, int>> pq;for (int i = 0; i < k; i++){pq.emplace(nums[i], i);}res.push_back(pq.top().first);for (int i = k; i < nums.size(); i++){pq.emplace(nums[i], i);while (pq.top().second <= i - k) // 关键 <={pq.pop();} res.push_back(pq.top().first);} return res;}
};

最小覆盖子串

  • 最小覆盖子串

在这里插入图片描述

class Solution {
public:string minWindow(string s, string t) {int hash1[128] = {};int m = s.size(), n = t.size();for (auto ch : t) hash1[ch - 'A']++;int hash2[128] = {};int begin = 0, len = m + 1;for (int l = 0, r = 0, cnt = 0; r < m; r++){int in = s[r] - 'A';if (++hash2[in] <= hash1[in]) cnt++;while (cnt == n){if (r - l + 1 < len){len = r - l + 1;begin = l;}int out = s[l++] - 'A';if (hash2[out]-- <= hash1[out]) cnt--;}}return len > m ? "" : s.substr(begin, len);}
};

普通数组

最大子数组和

  • 最大子数组和

在这里插入图片描述

定义 dp[i] 表示以i位置为结尾的最大子数组,则以i位置为结尾的子数组可以分为两类:i位置元素单独构成子数组,i位置及其之前所有元素构成子数组,则可得状态转移方程:dp[i] = max(dp[i - 1] + nums[i], nums[i]);

class Solution {
public:int maxSubArray(vector<int>& nums) {int res = -0x3f3f3f3f;int n = nums.size();vector<int> dp(n + 1);for (int i = 1; i <= n; i++){dp[i] = max(dp[i - 1] + nums[i - 1], nums[i - 1]);res = max(res, dp[i]);}return res;}
};

空间优化。

class Solution {
public:int maxSubArray(vector<int>& nums) {int res = -0x3f3f3f3f;int pre = 0;for (auto e : nums){pre = max(pre, 0) + e;res = max(res, pre);}return res;}
};

这就是我算法不好的原因吗?
在这里插入图片描述


合并区间

  • 合并区间

在这里插入图片描述

一道区间贪心问题。

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {sort(intervals.begin(), intervals.end());vector<vector<int>> res;int l = intervals[0][0], r = intervals[0][1];for (int i = 1; i < intervals.size(); i++){int a = intervals[i][0], b = intervals[i][1];// 当区间重叠时合并两个区间if (a <= r) r = max(r, b);else {// 当区间不重叠时插入res.push_back({l, r});l = a, r = b;}}res.push_back({l, r});return res;}
};

轮转数组

  • 轮转数组

在这里插入图片描述

本题解法:爱滴魔力转圈圈。
我们来观察结果,原数组右边某个区间长度的数都平移到了左边,左边剩余区间长度的数都平移到了右边。那我们把数组反转就可以得到类似的效果,但是此时两部分都是反转的,那我们再对应区间反转即可。

class Solution {
public:void rotate(vector<int>& nums, int k) {k %= nums.size();reverse(nums.begin(), nums.end());reverse(nums.begin(), nums.begin() + k);reverse(nums.begin() + k, nums.end());}
};

除自身以外数组的乘积

  • 除自身以外数组的乘积

在这里插入图片描述

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size(); vector<int> f(n, 1), g(n, 1), res(n);for (int i = 1; i < n; i++) f[i] = f[i - 1] * nums[i - 1];for (int i = n - 2; i >= 0; i--) g[i] = g[i + 1] * nums[i + 1];for (int i = 0; i < n; i++) res[i] = f[i] * g[i];return res;}
};

缺失的第一个正数

  • 缺失的第一个正数

在这里插入图片描述

这题做的跟吃了蟑螂一样难受。

class Solution {
public:int firstMissingPositive(vector<int>& nums) {int n = nums.size();for (int i = 0; i < n; i++){while (nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] != nums[i]){swap(nums[nums[i] - 1], nums[i]);}}for (int i = 0; i < n; i++){if (nums[i] != i + 1){return i + 1;}}return n + 1;}
};

本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~

头像
http://www.dtcms.com/wzjs/17756.html

相关文章:

  • 网站主题选择文章优化软件
  • 网站开发不用java吗网络营销案例分析论文
  • wordpress 入门主题上海网站推广优化
  • 设计网站价格东莞网站建设快速排名
  • 黄石本地做网站的建站之星
  • 网站内建设的发展国外域名注册
  • 公司已有网站 如何自己做推广网络营销策划步骤
  • 服装行业网站建设及推广景德镇seo
  • 网站网站建设邯郸seo优化公司
  • 做网站建设月收入多少竞价托管收费标准
  • 网站被k是怎么回事网站优化公司排名
  • 丹徒网站建设咨询广告网站有哪些
  • 江苏常州网百度关键词seo排名优化
  • 建筑网站ad新媒体运营师证书
  • 黄做网站揭阳百度快照优化排名
  • 邯郸做网站的地方沧州网站建设公司
  • dede手机网站制作产品推广方案ppt
  • 青岛胶南做网站的有多少进行优化
  • 网站建设难点是什么模板建站和开发网站区别
  • 德州做网站的公司有哪些热搜在哪里可以看
  • 天河门户网站建设公司自媒体平台哪个收益高
  • 网站建设网站制作有限今日国际新闻最新消息十条
  • wordpress主题会员功能东莞seo网络优化
  • 网站开发培训 从0湖南网络推广排名
  • 上杭网站设计百度seo优化排名
  • 常州语言网站建设游戏广告推广平台
  • 微信小程序可做购物网站吗网络seo是什么意思
  • 跨境电商网站设计东莞seo计费
  • 网站统计代码怎么弄厦门做网站公司有哪些
  • 湛江网站制作系统太原做推广营销