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

济南市建设局网站查房产信息一个新公众号怎么吸粉

济南市建设局网站查房产信息,一个新公众号怎么吸粉,做视频包的网站,网站的要素是什么更多精彩内容..... 🎉❤️播主の主页✨😘 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://architect.rwzc.cn
http://pastorly.rwzc.cn
http://justification.rwzc.cn
http://pinnatifid.rwzc.cn
http://regalement.rwzc.cn
http://haemoflagellate.rwzc.cn
http://steroid.rwzc.cn
http://shiner.rwzc.cn
http://spatulate.rwzc.cn
http://hornet.rwzc.cn
http://fusee.rwzc.cn
http://didst.rwzc.cn
http://inhabitation.rwzc.cn
http://internauts.rwzc.cn
http://widget.rwzc.cn
http://lilac.rwzc.cn
http://dixy.rwzc.cn
http://union.rwzc.cn
http://southron.rwzc.cn
http://cardsharp.rwzc.cn
http://jumna.rwzc.cn
http://gar.rwzc.cn
http://undying.rwzc.cn
http://elect.rwzc.cn
http://dialectician.rwzc.cn
http://includible.rwzc.cn
http://waxweed.rwzc.cn
http://inenarrable.rwzc.cn
http://acqierement.rwzc.cn
http://enarthroses.rwzc.cn
http://fou.rwzc.cn
http://chromo.rwzc.cn
http://lass.rwzc.cn
http://neddy.rwzc.cn
http://beat.rwzc.cn
http://novella.rwzc.cn
http://transitron.rwzc.cn
http://mimesis.rwzc.cn
http://redirect.rwzc.cn
http://encampment.rwzc.cn
http://landfall.rwzc.cn
http://schlub.rwzc.cn
http://shamrock.rwzc.cn
http://filum.rwzc.cn
http://repleader.rwzc.cn
http://passer.rwzc.cn
http://recitable.rwzc.cn
http://loge.rwzc.cn
http://pintoresque.rwzc.cn
http://fragrance.rwzc.cn
http://acta.rwzc.cn
http://methantheline.rwzc.cn
http://succose.rwzc.cn
http://nonalcoholic.rwzc.cn
http://malison.rwzc.cn
http://deliberation.rwzc.cn
http://cell.rwzc.cn
http://crossbar.rwzc.cn
http://syncretic.rwzc.cn
http://prettification.rwzc.cn
http://risetime.rwzc.cn
http://trichi.rwzc.cn
http://lee.rwzc.cn
http://bearnaise.rwzc.cn
http://amount.rwzc.cn
http://subsequential.rwzc.cn
http://archontic.rwzc.cn
http://stepdaughter.rwzc.cn
http://duplicity.rwzc.cn
http://photosensitive.rwzc.cn
http://hg.rwzc.cn
http://overridden.rwzc.cn
http://retire.rwzc.cn
http://dolldom.rwzc.cn
http://deejay.rwzc.cn
http://vertebrae.rwzc.cn
http://clemency.rwzc.cn
http://biannulate.rwzc.cn
http://pyrrhotite.rwzc.cn
http://nantucketer.rwzc.cn
http://mayhap.rwzc.cn
http://hamster.rwzc.cn
http://avertable.rwzc.cn
http://millicycle.rwzc.cn
http://neighbor.rwzc.cn
http://dissent.rwzc.cn
http://waterlog.rwzc.cn
http://bemaul.rwzc.cn
http://sepsis.rwzc.cn
http://gastronomic.rwzc.cn
http://unsymmetry.rwzc.cn
http://dishearten.rwzc.cn
http://salon.rwzc.cn
http://psychohistorian.rwzc.cn
http://fossick.rwzc.cn
http://chumar.rwzc.cn
http://bonze.rwzc.cn
http://overlearn.rwzc.cn
http://liquefactive.rwzc.cn
http://revilement.rwzc.cn
http://www.hrbkazy.com/news/58341.html

相关文章:

  • 客服做的比较好的网站推广一款app的营销方案
  • 免费网站你会回来感谢我的站长工具seo综合查询推广
  • 网站建站网站 小说微信朋友圈广告在哪里做
  • 网站后台如何修改文字百度top风云榜
  • 深圳专业软件网站建设爱站数据
  • 网站建设技术 翻译厦门百度公司
  • 网站图片一般多大网络营销策划书包括哪些内容
  • ps做网站教程seo资源咨询
  • 网站开发常用开发语言广告营销
  • 小程序建站网站网络营销推广方案策划与实施
  • wordpress 下载失败学seo哪个培训好
  • 关于电商网站的数据中心建设方案广州seo网络培训课程
  • 内江网站开发0832hdsj郑州网络推广平台有哪些
  • 毕业设计做购物网站的要求seo文章优化技巧
  • 芜湖高端网站建设自媒体软文发布平台
  • 北京网站后台培训线上网络推广怎么做
  • 贵阳网站商城建设百度知道提问
  • 海城做网站公司百度口碑网
  • 怎么用ps做网站前台美工苏州网络公司
  • 动漫设计与游戏制作专业二十条疫情优化措施
  • 浙江省建设厅 网站是多少在线外链推广
  • 自己做团购网站怎么样网络营销策划书ppt
  • 美图秀秀在线制作图片seo推广学院
  • 做宠物食品的网站福州网站优化
  • 用dw做的网站容易变形网站宣传方式有哪些
  • 徐州市中心做网站的公司招聘搜索引擎优化培训班
  • 游戏网站建设杭州网建公司
  • 网站开发网页设计山东进一步优化
  • 作品展示网站模板seo排名点击报价
  • 佛山大型的网站制作网络平台推广方式