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

珠海中企网站建设我想在百度发布信息

珠海中企网站建设,我想在百度发布信息,做一个平台网站大概多少钱,以下什么是b2b电子商务网站双指针(Two Pointers)是一种常用的算法思想,通过使用两个指针(通常是下标或迭代器)在数组、链表或字符串中协同工作,高效解决一些问题。双指针的核心思想是通过指针的移动来减少时间复杂度,通常…

双指针(Two Pointers)是一种常用的算法思想,通过使用两个指针(通常是下标或迭代器)在数组、链表或字符串中协同工作,高效解决一些问题。双指针的核心思想是通过指针的移动来减少时间复杂度,通常将暴力解法的 O(n²) 优化为 O(n)。


1. 双指针的常见形式

双指针的常见形式包括:

  1. 左右指针
    • 两个指针从两端向中间移动。
    • 适用于有序数组或字符串的问题(如两数之和、反转字符串等)。
  2. 快慢指针
    • 两个指针以不同的速度移动。
    • 适用于链表问题(如判断链表是否有环、找到链表的中间节点等)。
  3. 滑动窗口
    • 两个指针同向移动,维护一个窗口。
    • 适用于子数组或子字符串问题(如最短/最长子数组、无重复字符子串等)。

2. 左右指针

核心思想
  • 两个指针分别指向数组或字符串的两端,根据条件向中间移动。
  • 适用于有序数据。
经典问题
  1. 两数之和

    • 给定一个有序数组和一个目标值,找到两个数使它们的和等于目标值。
    • 代码实现:
      vector<int> twoSum(vector<int>& nums, int target) {int left = 0, right = nums.size() - 1;while (left < right) {int sum = nums[left] + nums[right];if (sum == target) {return {left, right};} else if (sum < target) {left++;} else {right--;}}return {};
      }
      
  2. 反转字符串

    • 给定一个字符数组,将其反转。
    • 代码实现:
      void reverseString(vector<char>& s) {int left = 0, right = s.size() - 1;while (left < right) {swap(s[left], s[right]);left++;right--;}
      }
      

3. 快慢指针

核心思想
  • 两个指针以不同的速度移动,通常用于链表问题。
  • 快指针每次移动两步,慢指针每次移动一步。
经典问题
  1. 判断链表是否有环

    • 使用快慢指针,如果快指针追上慢指针,则链表有环。
    • 代码实现:
      bool hasCycle(ListNode* head) {ListNode* slow = head;ListNode* fast = head;while (fast && fast->next) {slow = slow->next;fast = fast->next->next;if (slow == fast) {return true;}}return false;
      }
      
  2. 找到链表的中间节点

    • 快指针到达链表末尾时,慢指针正好在中间。
    • 代码实现:
      ListNode* middleNode(ListNode* head) {ListNode* slow = head;ListNode* fast = head;while (fast && fast->next) {slow = slow->next;fast = fast->next->next;}return slow;
      }
      

4. 滑动窗口

核心思想
  • 两个指针同向移动,维护一个窗口。
  • 适用于子数组或子字符串问题。
经典问题
  1. 无重复字符的最长子字符串

    • 找到不包含重复字符的最长子字符串。
    • 代码实现:
      int lengthOfLongestSubstring(string s) {int left = 0, right = 0;int max_len = 0;unordered_set<char> window;while (right < s.size()) {if (window.find(s[right]) == window.end()) {window.insert(s[right]);max_len = max(max_len, right - left + 1);right++;} else {window.erase(s[left]);left++;}}return max_len;
      }
      
  2. 和大于等于目标值的最短子数组

    • 找到和大于等于目标值的最短子数组。
    • 代码实现:
      int minSubArrayLen(int target, vector<int>& nums) {int left = 0, right = 0;int sum = 0;int min_len = INT_MAX;while (right < nums.size()) {sum += nums[right];while (sum >= target) {min_len = min(min_len, right - left + 1);sum -= nums[left];left++;}right++;}return min_len == INT_MAX ? 0 : min_len;
      }
      

5. 双指针的适用场景

  1. 有序数组或字符串
    • 左右指针适用于有序数据。
  2. 链表问题
    • 快慢指针适用于链表问题。
  3. 子数组或子字符串问题
    • 滑动窗口适用于子数组或子字符串问题。

6. 总结

  • 双指针是一种高效的算法思想,通过两个指针的协同工作,可以将时间复杂度从 O(n²) 优化为 O(n)。
  • 左右指针、快慢指针和滑动窗口是双指针的常见形式,分别适用于不同的问题场景。
  • 掌握双指针思想,可以高效解决许多数组、链表和字符串相关的问题。
http://www.dtcms.com/wzjs/184236.html

相关文章:

  • 张家港建网站费用seo高手培训
  • wordpress版权声明福州网站seo公司
  • 常德网站开发网站搜索引擎优化方案
  • 来年做哪个网站致富广州seo网站排名
  • phpweb绿色大气茶叶网站源码中国网站建设公司
  • 免费软件app下载苏州百度快速排名优化
  • wordpress批量改url插件百度seo发包工具
  • 西部数码怎么上传网站关键词挖掘网站
  • 网站建设静态代码seo顾问是什么职业
  • 利用赞赏码做网站收款商丘网络推广哪家好
  • 中国建设银行企业网站营销网络推广方式有哪些
  • 做的网站百度不收录数据分析软件哪个最好用
  • 网站建站售后服务白杨seo博客
  • 网站部分版块显示正在建设云和数据培训机构怎么样
  • 南昌做网站多少钱深圳网络推广案例
  • 聊城网站建设培训班文山seo公司
  • 山东高端网站建设wang包头seo
  • wordpress添加产品产品列表福州seo按天付费
  • 星巴克网络营销案例分析seo关键词快速排名前三位
  • 北京外包做网站如何报价网站seo策划方案
  • 网站文章更新怎么做图片外链在线生成网址
  • 网站滚动图片代码seo外链平台热狗
  • 为什么有些公司却没有自己的网站推广普通话宣传标语
  • 怎么申请免费国内免费网站seo排名赚app
  • 网站建设策划书结束语app推广工作是做什么的
  • 成都建工雅安建设有限责任公司网站搜索引擎优化的核心本质
  • 网站有源代码如何做seo做网站推广
  • 2017年做哪个网站致富个人网站建站教程
  • 公众号 微网站开发线上销售平台如何推广
  • 中山做网站好的公司打广告