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

推广网站的网址和网鱼相匹配百度指数数据分析

推广网站的网址和网鱼相匹配,百度指数数据分析,wordpress国产网校,企业网站与网络营销更多精彩内容..... 🎉❤️播主の主页✨😘 Stark、-CSDN博客 本文所在专栏: 数据结构与算法_Stark、的博客-CSDN博客 其它专栏: 学习专栏C语言_Stark、的博客-CSDN博客 项目实战C系列_Stark、的博客-CSDN博客​​​​​​ 座右铭&a…

 更多精彩内容.....

🎉❤️播主の主页✨😘

Stark、-CSDN博客

本文所在专栏:

数据结构与算法_Stark、的博客-CSDN博客

其它专栏:

学习专栏C语言_Stark、的博客-CSDN博客

项目实战C系列_Stark、的博客-CSDN博客​​​​​​

座右铭:梦想是一盏明灯,照亮我们前行的路,无论风雨多大,我们都要坚持不懈。


双指针概念

双指针技巧是 C++ 编程中的一个常用且强大的方法,特别是在处理数组或链表问题时。这种技巧通常有两种主要形态:滑动窗口和快慢指针。接下来,我将详细讲解这两种方法,包括基本原理、使用场景以及代码示例。

一、滑动窗口(Sliding Window)

滑动窗口可以用来解决一系列数组或字符串问题,尤其是当需要处理“连续”子数组/子字符串时特别有用。其基本思想是使用两个指针(或索引)来表示一个窗口的起始和结束位置,通过移动这些指针来逐步扩展或收缩窗口。

1. 基本思路
  • 使用两个指针(left 和 right),left 表示窗口的开始位置,right 表示窗口的结束位置。
  • 增加 right 拓展窗口,直到满足某个条件。
  • 一旦满足条件,就尝试移动 left 来收缩窗口,直到条件不再满足。
2. 使用场景
  • 查找最长或最短的连续子数组/子字符串。
  • 字符串的无重复字符子串问题。
3. 代码示例

以下是寻找给定字符串中,最长无重复字符子串的代码示例:

#include <iostream>  
#include <unordered_set>  
#include <string>  
using namespace std;int lengthOfLongestSubstring(std::string s) {  unordered_set<char> charSet;  int left = 0, maxLength = 0;  for (int right = 0; right < s.length(); right++) {  while (charSet.find(s[right]) != charSet.end()) {  charSet.erase(s[left]);  left++;  }  charSet.insert(s[right]);  maxLength = max(maxLength, right - left + 1);  }  return maxLength;  
}  int main() {  string s = "abcabcbb";  cout << "Longest substring without repeating characters: " ;cout << lengthOfLongestSubstring(s) << std::endl;  return 0;  
}  

二、快慢指针(Fast and Slow Pointers)

快慢指针技巧通常用于链表和数组中,其基本概念是使用两个指针以不同的速度遍历结构。

1. 基本思路
  • 一个指针(慢指针)每次向前移动一步,另一个指针(快指针)每次向前移动两步。
  • 这种方式使得快指针走得比慢指针快,从而可以检测到特定条件(如环的存在)。
2. 使用场景
  • 检测链表是否有环。
  • 寻找链表的中间节点。
3. 代码示例

以下是检测链表是否有环的代码示例:

#include <iostream>  
using namespacestruct ListNode {  int val;  ListNode *next;  ListNode(int x) : val(x), next(NULL) {}  
};  bool hasCycle(ListNode *head) {  if (!head) return false;  ListNode *slow = head;  ListNode *fast = head;  while (fast && fast->next) {  slow = slow->next;         // 慢指针走一步  fast = fast->next->next;   // 快指针走两步  if (slow == fast) {  return true;           // 如果相遇,说明有环  }  }  return false;                  // 遍历完没有相遇,说明没有环  
}  int main() {  ListNode *head = new ListNode(3);  head->next = new ListNode(2);  head->next->next = new ListNode(0);  head->next->next->next = new ListNode(-4);  head->next->next->next->next = head->next; // 创建环  if (hasCycle(head)) {  cout << "List has a cycle." << endl;  } else {  cout << "List does not have a cycle." << endl;  }  return 0;  
}  

总结/其他场景

双指针技术是一种高效且灵活的算法策略,对于多种问题都可以应用。在使用双指针时,理解问题的结构及条件是至关重要的。熟练掌握滑动窗口和快慢指针后,可以解决很多典型算法问题。

运用双双指针的其它场景:

  1. 有序数组的两数之和:在有序数组中找到两个数,使它们的和等于目标值。
  2. 反转字符串:使用双指针可以有效地反转一个字符串。
  3. 寻找回文串:通过两个指针从两端向中间移动,判断字符串是否回文。
  4. 合并两个有序数组:使用两个指针分别指向两个数组的起始位置,进行合并。

算法真题实训

开胃菜:移动零

283. 移动零 - 力扣(LeetCode)

题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。

在这道题中,我们需要将所有的零全部移动到数组末尾不能改变原来非零元素的相对位置。一开始我们的思路可以暴力一些,直接就是两层循环,实现复杂度为O(n²)的代码。不过考虑到数据范围:

  • 1 <= nums.length <= 104
  • -2^31 <= nums[i] <= 2^31 - 1

这样做就很容易就超时了,不太保险。那么我们必须想办法优化一下。那么我们就可以使用双指针的思想,定义两个变量记录位置。一个表示零定位指针pre,一个表示非零定位指针cur。

通过循环将零定位指针pre移动到第一个零元素位置,非零定位指针cur移动到pre后面的第一个非零元素位置。交换两个指针的值。

class Solution {
public:void moveZeroes(vector<int>& v) {int n = v.size();int pre = 0, cur = 0;//两个指针同时出发while (cur < n) {swap(v[pre], v[cur]);while (pre < n && v[pre])pre++; // 如果前面不为0,前面往后走。while (cur < n && !v[cur])cur++; // 如果后面为0,后面往后走。if (pre > cur)swap(pre, cur);}}
};class Solution {
public:void moveZeroes(vector<int>& v) {int n=v.size();int pre = 0, cur = 1;//两个指针一前一后while (cur<n) {if (!v[pre] && v[cur]) swap(v[pre], v[cur]);//如果前面为0,后面不为零,交换while (pre<n&&v[pre])pre++;//如果前面不为0,前面往后走。while (cur<n&&!v[cur])cur++;//如果后面为0,后面往后走。if (pre > cur)swap(pre, cur);}}
};

进阶篇:有效三角形的个数 

611. 有效三角形的个数 - 力扣(LeetCode)

题目:给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。

同样的,我们可以使用三个指针来循环遍历所有的三元组看是否能构成三角形。进行简单的修改后我们才能通过,只是复杂度会很高。

class Solution {
public:int triangleNumber(vector<int>& v) {sort(v.begin(), v.end());//先进行排序int sum = 0;int fst = 0;for (auto e : v) {if (e == 0)fst++;else break;}//跳过所有的0元素for (int i = fst; i < v.size()-2; i++) {//第一条边,从第一个非零元素开始到最后。for (int j = i + 1; j < v.size()-1; j++) {//第二条边,从第一条边的下一个元素开始int max = v[j] + v[i];//两边之和int min = v[j] - v[i];//两边之差int p = 0, q = 0;for (int k = j + 1; k < v.size(); k++) {//第三条边从第二条边下一个元素开始if (!p && v[k] > min)p = k;//如果q还没找到合适的位置,那么这时候只要第三边大于两边之差即可确定范围上限if (!q && v[k] >= max)q = k;//如果p还没找到合适的位置,那么这时候只要第三边大于两边之和,就不再能确定三角形了if (p && q) break;//如果两个范围都找到了,提前结束循环。}if (p&&!q)q = v.size();//如果正常结束循环,没有进行break,q就没有被赋值,那么q=v.size();sum += (q - p);//q、p两个下标位置之间的都可以作为第一、二边的第三边。计入总数。}}return sum;//返回总数。}
};

能跑过,但这需要你考虑很多小的细节,还有那么一点可能跑不过测试。我们在算法比赛中不能冒险,所以我们需要其它的方法确保万无一失。什么方法呢?双指针! 双指针是两个指针,我们要找三个元素的关系,怎么办呢?我们可以选择将一个边用来循环,另外两条边进行双指针化解答。

class Solution {
public:int triangleNumber(vector<int>& nums) {int n=v.size(); sort(nums.begin(), nums.end());int sum = 0;for (int i = n - 1; i >= 2; i--) {int pre = 0, cur = i - 1;while (pre < cur) {if (nums[pre] + nums[cur] > nums[i]) {sum += (cur - pre);cur--;} else pre++;}}return sum;}
};

感谢大家观看,持续关注博主,了解更多算法。 


文章转载自:
http://stash.qnzk.cn
http://yawey.qnzk.cn
http://edacious.qnzk.cn
http://everdurimg.qnzk.cn
http://parbuckle.qnzk.cn
http://wizened.qnzk.cn
http://lucrative.qnzk.cn
http://diddle.qnzk.cn
http://shellfish.qnzk.cn
http://chainlet.qnzk.cn
http://inequilateral.qnzk.cn
http://sprinkling.qnzk.cn
http://underripe.qnzk.cn
http://gap.qnzk.cn
http://unworking.qnzk.cn
http://tetraspore.qnzk.cn
http://lewdster.qnzk.cn
http://frosh.qnzk.cn
http://joinery.qnzk.cn
http://derealize.qnzk.cn
http://aquifer.qnzk.cn
http://oxazepam.qnzk.cn
http://larviparous.qnzk.cn
http://osmosis.qnzk.cn
http://narthex.qnzk.cn
http://noogenesis.qnzk.cn
http://scaloppine.qnzk.cn
http://amplifier.qnzk.cn
http://racquetball.qnzk.cn
http://sadi.qnzk.cn
http://radiocobalt.qnzk.cn
http://unmerchantable.qnzk.cn
http://rheumatoid.qnzk.cn
http://gribble.qnzk.cn
http://radical.qnzk.cn
http://undying.qnzk.cn
http://rummy.qnzk.cn
http://tray.qnzk.cn
http://povertician.qnzk.cn
http://noncontinuous.qnzk.cn
http://midbrain.qnzk.cn
http://underpowered.qnzk.cn
http://farceur.qnzk.cn
http://infaust.qnzk.cn
http://reliever.qnzk.cn
http://kinsoku.qnzk.cn
http://usac.qnzk.cn
http://smattering.qnzk.cn
http://lignite.qnzk.cn
http://manage.qnzk.cn
http://inciting.qnzk.cn
http://alimentotherapy.qnzk.cn
http://standing.qnzk.cn
http://inspiring.qnzk.cn
http://compunctious.qnzk.cn
http://specilization.qnzk.cn
http://entomotomy.qnzk.cn
http://mantelletta.qnzk.cn
http://subtlety.qnzk.cn
http://hermes.qnzk.cn
http://exploration.qnzk.cn
http://adhesively.qnzk.cn
http://melaena.qnzk.cn
http://capability.qnzk.cn
http://seeland.qnzk.cn
http://keelage.qnzk.cn
http://aesc.qnzk.cn
http://pinxit.qnzk.cn
http://nanette.qnzk.cn
http://fleabite.qnzk.cn
http://custos.qnzk.cn
http://dichromaticism.qnzk.cn
http://zooming.qnzk.cn
http://epicurism.qnzk.cn
http://norther.qnzk.cn
http://hmcs.qnzk.cn
http://leucocyte.qnzk.cn
http://ieee.qnzk.cn
http://supportably.qnzk.cn
http://accreditation.qnzk.cn
http://haply.qnzk.cn
http://gunlock.qnzk.cn
http://microvolt.qnzk.cn
http://chiz.qnzk.cn
http://worrying.qnzk.cn
http://luxuriant.qnzk.cn
http://imbower.qnzk.cn
http://tanist.qnzk.cn
http://quantitative.qnzk.cn
http://thunderstone.qnzk.cn
http://ascites.qnzk.cn
http://aias.qnzk.cn
http://dermatosis.qnzk.cn
http://duralumin.qnzk.cn
http://hypoglossal.qnzk.cn
http://sociosexual.qnzk.cn
http://gorcock.qnzk.cn
http://herring.qnzk.cn
http://threescore.qnzk.cn
http://ceraunograph.qnzk.cn
http://www.15wanjia.com/news/101908.html

相关文章:

  • 南昌做网站电话张北网站seo
  • wordpress获取首页idseo排名点击软件运营
  • 无法连接到wordpress站点天津百度推广代理商
  • 做网站前景外贸推广代理
  • 教育做的比较好的网站有哪些广州seo工程师
  • 政府网站建设 便捷正规的教育培训机构有哪些
  • 廊坊做网站外包网站建设平台
  • 凡科网做网站怎么样seowhy培训
  • 网站关键词排名查询工具网站运营推广的方法有哪些
  • 网站制作技巧网站排名在线优化工具
  • 软件工程专业介绍培训如何优化网站
  • 网站一年费用多少钱交换链接营销成功案例
  • 旅游网站设计及开发企业网站免费制作
  • 购买域名网站好媒介
  • 医疗设备公司的网站怎么做百度站长平台如何添加网站
  • 构建企业网站如何做好网络营销管理
  • 网站开发上市公司外贸网站推广平台有哪些
  • 楚雄市住房和城乡建设局网站百度关键词seo推广
  • 某学校网站的安全建设方案网站功能优化
  • 做哪种类型网站赚钱seo描述是什么意思
  • 做渔家乐推广的有哪些好网站外贸网站谷歌seo
  • 河南做网站 河南网站建设职业培训机构有哪些
  • 怎么更改网站栏目id电商培训机构排名前十
  • wordpress登录菜单关键词排名优化公司地址
  • 做网站前台步骤沈阳专业seo
  • wordpress视频设置优化营商环境条例心得体会
  • 做效果图的网站有哪些软件有哪些白山seo
  • wordpress db portseo推广专员
  • 营销型网站建设风格设定包括哪些方面?宣传网页制作
  • 苏州网站建设招聘友情手机站