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

青岛网站制作公司哪家正规网页搜索引擎大全

青岛网站制作公司哪家正规,网页搜索引擎大全,哪些网站是做设计的,新乡手机网站建设官网二分 子串简写满分代码及思路solution 1(暴力 模拟双指针70分)solution 2(二分 AC) 管道满分代码及思路 子串简写 题目链接 满分代码及思路 solution 1(暴力 模拟双指针70分) 对于这道题目其实我首先想到…

二分

  • 子串简写
    • 满分代码及思路
      • solution 1(暴力 模拟双指针70分)
      • solution 2(二分 AC)
  • 管道
    • 满分代码及思路

子串简写

在这里插入图片描述
题目链接

满分代码及思路

solution 1(暴力 模拟双指针70分)

对于这道题目其实我首先想到的就是双指针,具体拿这题来说就是,我们现在有两个指针left right 现在要做的就是 在给定的字符串中枚举出所有同时满足

1.长度大于等于K;
2.以c1开头以c2结尾

以上两个条件的所有子串 对吧
那么就很好办了呀 我们先让left指针找到c1,然后通过不断移动right
枚举出所有以left此时位置为左端点 且满足条件的所有合法情况
每次更新答案count 就好 最后输出一下
但是有几个比较大的样例超时了 这时候我们就需要想办法优化一下:
在这里插入图片描述
因为我们这个双指针的方法 主要依靠两个for循环 时间复杂度是O(n*n)

Q:所以我们要思考的是我们可以去优化的点在哪啊?

也就是说这个代码有什么重复且不必要的操作吗?

我觉得这个思考很重要很重要

A:二分相对于双指针优化的点是不是在于c2位置的确定啊 因为双指针需要枚举right每一种情况吧 因为我们就像一个瞎子 我们的right只有走到它的儿子面前才能跟他相认

具体来说,在双指针方法里,对于每一个以 c1 开头的位置,代码需要从 left + K - 1 开始,逐个枚举所有可能的 right 位置,直到找到以 c2 结尾的位置,从而判断是否满足子串长度大于等于 K 的条件

二分查找方法首先记录下所有 c1 和 c2 出现的位置。对于每一个 c1 出现的位置,要寻找满足子串长度大于等于 K 的 c2 位置时,它利用 c2 位置数组的有序性(因为位置是按顺序记录的)进行二分查找
此时我们的right指针他是一个视力很好的人 他知道自己的子女 在这条路的哪个方位

二分查找每次将搜索范围缩小一半,其时间复杂度为 (O(log m)),其中 m 是 c2 出现的次数。对于所有 c1 出现的位置都进行二分查找,整体时间复杂度就是 (O(n log m)),在一般情况下可以近似看作 (O(n log n)),相比于双指针方法的 (O(n^2)) 有了显著的优化。

#include <iostream>
#include <string>// 引入标准库命名空间
using namespace std;// 双指针方法
int double_point(int K, const string& S, char c1, char c2) {int n = S.length();int count = 0;for (int left = 0; left < n; ++left) {if (S[left] == c1) {for (int right = left + K - 1; right < n; ++right) {if (S[right] == c2) {++count;}}}}return count;
}int main() {int K;string S;char c1, char c2;// 读取输入cin >> K;cin >> S >> c1 >> c2;// 计算结果int result = double_point(K, S, c1, c2);// 输出结果cout << "双指针方法结果: " << result << endl;return 0;
}

solution 2(二分 AC)

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>using namespace std;// 二分查找方法
int binary_search(int K, const string& S, char c1, char c2) {int n = S.length();vector<int> start;vector<int> end;// 记录 c1 和 c2 出现的位置for (int i = 0; i < n; ++i) {if (S[i] == c1) {start.push_back(i);}if (S[i] == c2) {end.push_back(i);}}int count = 0;for (int s : start) {// 二分查找满足条件的 c2 位置int left = 0, right = end.size() - 1;int target = s + K - 1;while (left <= right) {int mid = left + (right - left) / 2;if (end[mid] >= target) {right = mid - 1;} else {left = mid + 1;}}count += end.size() - left;}return count;
}int main() {int K;string S;char c1, c2;// 读取输入cin >> K;cin >> S >> c1 >> c2;// 计算结果int result = binary_search(K, S, c1, c2);// 输出结果cout << "二分查找方法结果: " << result << endl;return 0;
}    

管道

在这里插入图片描述
题目链接

满分代码及思路

今天不适合学习 明天写一下

http://www.dtcms.com/wzjs/358803.html

相关文章:

  • 做类似3d溜溜的网站企业培训考试系统
  • 各位大哥给个网站百度搜索风云榜明星
  • 衡水网站建设优化排名电商推广和网络推广的区别
  • 注册软件开发公司需要什么条件搜索引擎优化不包括
  • 网络策划案电商seo是什么意思
  • wordpress登录去不了后台seo博客教程
  • 高权重域名做网站全球网络营销公司排名
  • 网站上的截图怎么做女教师遭网课入侵视频大全
  • 太原做网站外链生成网站
  • ps网站子页怎么做的seo排名如何
  • 新疆生产建设兵团网站公安局sem是什么方法
  • b2c的平台有哪些广州seo优化电话
  • 常德网站建百度开户联系方式
  • 网站怎么做弹幕播放器注册网站查询
  • jsp做网站案例北京网站优化外包
  • 品牌网站建设顾问自己做网络推广怎么做
  • 商城网站建设开发网站宣传费用
  • 专业外包网站建设公司网站免费优化
  • 欧美做电影 迅雷下载网站网站建设推广多少钱
  • 个人怎么建设b2b2c网站腾讯疫情实时数据
  • 企业营销型网站建设哪家公司好列表网推广效果怎么样
  • 做选择的网站首页新冠疫情最新消息今天公布
  • 做的网站怎才能被别人访问到搜索引擎有哪些?
  • 怎么查看一个网站做的外链美国疫情最新消息
  • 适合推广的网站有哪些广东东莞最新情况
  • 网站建设关键词优化cps广告联盟网站
  • 福州企业建站服务百度开发者平台
  • 品质好可以说品质什么企业新网站seo推广
  • 临沂市住房和城乡建设局网站网站优化有哪些技巧
  • 手机苗木网站源码国内ip地址 免费