爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      双指针算法专题(1)

      首页 知识中心 大数据 文章详情页

      双指针算法专题(1)

      2025-02-11 09:39:39 阅读次数:12

      lt,指针,数组,算法,遍历

      双指针算法的介绍 

      在正式做题之前,得先了解:什么是双指针? 

      双指针一般是指两个不同的变量,它们分别指向数据的不同位置。这两个指针可以根据特定的问题需求以不同的方式移动和操作,从而实现高效的算法和数据处理。

      先来了解一个最简单的双指针。

      双指针算法专题(1)​

      上面这种事最简单的方法,但是其有一个缺点:需要另外申请一份内存空间,也就是只能 “异地” 操作,如果想要在原地修改就做不到,因此,这里就引出了我们的双指针算法。

      双指针算法专题(1)​

      这里我们就可以得出一个结论:双指针算法可以将 “异地” 操作,转变为 “原地” 操作。

      常见的双指针有两种:一种是对撞指针,也称为左右指针;另一种是快慢指针。

      什么是对撞指针呢?对撞指针从两端向中间移动。一个指针从最左端开始,另一个从最右端开始,然后逐渐往中间逼近。对撞指针的终止条件一般是两个指针相遇或者错开(也可能在循环内部找到结果直接跳出循环),也就是:left == right(两个指针指向同一个位置)  left > right(两个指针错开)。其实就是 当 left >= right 时,循环就可以停止了。最常见的对撞指针就是我们前面学习的快速排序和二分查找算法。

      什么是快慢指针呢?其又称为龟兔赛跑算法,其基本思想就是使用两个移动速度不同的指针在数组或链表等序列结构上移动。这种方法对于处理环形链表或数组非常有用。其实不单单是环形链表或者是数组,如果我们要研究的问题出现循环往复的情况时,均可考虑使用快慢指针的思想。
      快慢指针的实现方式有很多种,最常用的一种就是:在一次循环中,每次让慢的指针向后移动一位,而快的指针往后移动两位,实现一快一慢。我们前面在原地删除值为 val 的元素的方法就类似于快慢指针,只不过我们没有设置指针的速度而已。

      双指针算法对于数组分块的问题的处理是非常有效的。

      下面我们就来实战一些题目: 

      283. 移动零

      题目:

      给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

      请注意 ,必须在不复制数组的情况下原地对数组进行操作。

       

      示例 1:

      输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]

      示例 2:

      输入: nums = [0]输出: [0]

      提示:

      • 1 <= nums.length <= 104
      • -231 <= nums[i] <= 231 - 1

      思路: 

      题目已经明确地告诉我们了,不能申请一个新的数组,只能原地进行修改。在做题之前,我们最好能画图。通过画图来揣摩出该用哪种算法来解决。

      双指针算法专题(1)

      上面这种采用的是对撞指针,但很明显不行,因此我们就只能采用快慢指针。

      双指针算法专题(1)

      理想是丰满的,现实是骨感的。上述情况虽然在画图时确实好解决,但是在实际编码时,会出现很多种不确定的情况。因此优化成这样:fast找非零元素,直接和slow进行交换。

      有的小伙伴这里可能会有疑惑:slow万一也是非零数呢?它们一交换,不就会影响非零数的相对顺序吗?其实这种情况是不存在的,假设两种极端情况:

      1、数组中全部是非零数,那么全部就只是自己和自己进行交换;

      2、数组中全部是零,这就更不可能了,if 语句的进不去,咋交换呢? 

      代码实现:

      class Solution {
          public void moveZeroes(int[] nums) {
              for (int fast = 0, slow = 0; fast < nums.length; fast++) {
                  // fast走到非零位置就进行交换,走到零位置什么也不处理,让其++即可
                  if (nums[fast] != 0) {
                      int temp = nums[fast];
                      nums[fast] = nums[slow];
                      nums[slow] = temp;
                      slow++;
                  }
              }
          }
      }

      总结:一次性做不到完美没关系,多试几次就好啦!算法就是在不断的犯错中学习进步的。 

      1089. 复写零

      题目:

      给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。

      注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。

       

      示例 1:

      输入:arr = [1,0,2,3,0,4,5,0]
      输出:[1,0,0,2,3,0,0,4]
      解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]

      示例 2:

      输入:arr = [1,2,3]
      输出:[1,2,3]
      解释:调用函数后,输入的数组将被修改为:[1,2,3]
      
      

      提示:

      • 1 <= arr.length <= 104
      • 0 <= arr[i] <= 9

      思路:首先,想要的就是去遍历这个数组,遇到0就复写,否则就不作处理。如果是在另外一个数组上根据上面的做法可行,但是在一个数组里面的话,就会出现覆盖的情况。

      双指针算法专题(1)

      原地修改的话,就是去遍历数组,但是直接从头开始遍历的话,肯定是不行的,因为会出现覆盖的情况,那我们就尝试着从后开始遍历。但问题来了:从那个位置开始呢?因为复写的问题,导致我们不能够正确的找到最后一个元素的位置,因此这里就得解决找到最后一个元素的问题。

      双指针算法专题(1)

      找到最后一个元素之后,就从该位置开始往前遍历去往原数组中进行复写操作。

      双指针算法专题(1)

      代码实现:

      错误版本:

      class Solution {
          public void duplicateZeros(int[] arr) {
              // 开始找最后一个位置
              int count = 0;
              int cur = 0;
              for (; cur < arr.length; cur++) {
                  if (arr[cur] != 0) {
                      count++;
                  } else {
                      count += 2;
                  }
                  if (count >= arr.length) { // 一次走两步,可能出现 > 的情况
                      // 说明此时已经找到最后一个元素了
                      break;
                  }
              }
              int dest = arr.length-1;
              while (cur >= 0 && dest >= 0) {
                  if (arr[cur] != 0) {
                      // 复写一次
                      arr[dest--] = arr[cur--];
                  } else {
                      // 得复写两次
                      cur--;
                      arr[dest--] = 0;
                      if (dest < 0) { // 这里可能会出现越界的情况
                          break;
                      }
                      arr[dest--] = 0;
                  }
              }
          }
      }

      上面的代码在大多数测试用例下都能正常通过,但是有一个特殊的测试用例要注意:

      双指针算法专题(1)

      在这个测试用例中 cur 指向数组下标为5的地方,后续在进行复写的时候,会出现一种情况:dest 的位置出现在了 cur 的前方,也就导致了最后复写的结果全为0了。也就是 dest 指针走到 cur 指针的前方,覆盖了原来的值,致使出错。那为什么会出现这种情况呢?很简单,只有 dest 一次 走两步才会超过 cur 的位置,因此我们可以设置一下让 dest 最开始的位置只走一步,也就是值复写一次0即可。那么问题又来了:什么时候让 dest 在最开始的位置只走一步呢?仔细观察一下:是不是刚刚的这种情况是 count > arr.length 才出现的,而 count == arr.length 的时候是正常进行的。因此当 count > arr.length 时,就让两者都只走一步。其实这种情况(count > arr.length)也就是因为数组空间不足,不能够将那个多余的0给存起来,就导致了覆盖。因此我们也只是让这个dest 值走一步,另一步我们认为其在不存在的地方走完了即可。

      正确版本:

      class Solution {
          public void duplicateZeros(int[] arr) {
              // 开始找最后一个位置
              int count = 0;
              int cur = 0;
              for (; cur < arr.length; cur++) {
                  if (arr[cur] != 0) {
                      count++;
                  } else {
                      count += 2;
                  }
                  if (count >= arr.length) { // 一次走两步,可能出现 > 的情况
                      // 说明此时已经找到最后一个元素了
                      break;
                  }
              }
              int dest = arr.length-1;
              if (count > arr.length) {
                  // 减少 dest 移动的次数(和 cur 一样暂时只移动一次)
                  arr[dest--] = arr[cur--];
              }
              while (cur >= 0 && dest >= 0) {
                  if (arr[cur] != 0) {
                      // 复写一次
                      arr[dest--] = arr[cur--];
                  } else {
                      // 得复写两次
                      cur--;
                      arr[dest--] = 0;
                      if (dest < 0) { // 这里可能会出现越界的情况
                          break;
                      }
                      arr[dest--] = 0;
                  }
              }
          }
      }

      202. 快乐数

      题目:

      编写一个算法来判断一个数 n 是不是快乐数。

      「快乐数」 定义为:

      • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
      • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
      • 如果这个过程 结果为 1,那么这个数就是快乐数。

      如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

       

      示例 1:

      输入:n = 19
      输出:true
      解释:
      1^2 + 9^2 = 82
      8^2 + 2^2 = 68
      6^2 + 8^2 = 100
      1^2 + 0^2 + 0^2 = 1
      

      示例 2:

      输入:n = 2
      输出:false

      提示:

      • 1 <= n <= 2^31 - 1

      思路: 根据快乐数的定义,我们可以知道:在进行转换过程中只会出现两种情况:1、无限循环但结果并不为1;2、在转换过程中出现结果为1。其实第二种情况也是无限循环,只不过循环的结果一直是1而已。

      双指针算法专题(1)

      因此可以总结出下面的规律:

      双指针算法专题(1)

      这里的思路也就出来了:通过快慢指针找到环, 接着判断环的元素值是否为1即可。

      代码实现:

      class Solution {
          public boolean isHappy(int n) {
              // 通过快慢指针来进行判断环值是否为1
              int fast = n;
              int slow = n;
              // 注意得让它们先走,否则两者就还是相等的
              slow = waterFlower(slow);
              fast = waterFlower(fast);
              fast = waterFlower(fast);
              while (slow != fast) {
                  // slow一次走一步,fast一次走两步
                  slow = waterFlower(slow);
                  fast = waterFlower(fast);
                  fast = waterFlower(fast);
              }
              return slow == 1; // 看相遇的值是否为1,是1就是快乐树,否则就不是快乐数
          }
      
          private int waterFlower(int n) {
              // 先计算出n的位数
              int temp = n;
              int count = 0;
              while (temp != 0) {
                  count++;
                  temp /= 10;
              }
              int sum = 0;
              // 通过位数确定循环的次数
              for (; count != 0; count--) {
                  sum += (int) Math.pow((n%10),2);
                  n /= 10;
              }
              return sum;
          }
      }

      注意:这里去转换的方法是模拟 计算水仙花数 的方法写的,我们也可以直接通过计算每一位的值平方,然后再相加也可以。 

      11.盛最多水的容器

      题目: 

      给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

      找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

      返回容器可以储存的最大水量。

      说明:你不能倾斜容器。

       

      示例 1:

       

      双指针算法专题(1)

      输入:[1,8,6,2,5,4,8,3,7]
      输出:49 
      解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

      示例 2:

      输入:height = [1,1]
      输出:1
      
      

      提示:

      • n == height.length
      • 2 <= n <= 105
      • 0 <= height[i] <= 104

      思路:题目是让我们求最大盛水量,其实也就是最大的容积。对于这个的话,直接遍历去找最大容积即可。容积公式 = 容器之间的长度 * 容器的最小高度(容器可能不是高度相等的)。

      代码实现:

      错误版本:直接暴力枚举,双层循环遍历。

      class Solution {
          错误解法:暴力枚举
          public int maxArea(int[] height) {     
              int max = 0;
              for (int i = 0; i < height.length; i++) {
                  for (int j = i+1; j < height.length; j++) {
                      // 计算最大值并更新
                      int temp = (j-i) * (height[j] > height[i] ? height[i] : height[j]);
                      if (temp > max) {
                          max = temp;
                      }
                  }
              }
              return max;
          }
      }

      很显然,上面这个代码的时间复杂度达到了O(N^2),会超出时间限制的。但是肯定是使用这种方式来计算的,只不过我们的时间复杂度过大,因此这里就得找到减少遍历次数的问题。我们可以尝试从数组的两头开始遍历,降低时间复杂度。

      双指针算法专题(1)

      注意:

      1、这里之所以不让left 和 right 同时往"后"遍历,是因为如果同时遍历的话,可能会漏掉最大值的情况(会有情况被漏掉)。 

      2、每一次只移动最小的指针值,就保证了下一次的容积可能不会小于这次的。但如果移动最大值的话,容积就肯定小于这次了。因为 最小值没有变(容器高度),然后 两者之间的距离变小了,那么最终的结果也就变小了。

      正确版本:使用对撞指针减少遍历的次数。

      class Solution {
          public int maxArea(int[] height) {
              int left = 0;
              int right = height.length-1;
              int max = 0;
              while (left < right) {
                  int min = height[left] < height[right] ? height[left] : height[right];
                  int temp = (right-left) * min;
                  if (temp > max) {
                      max = temp;
                  }
                  if (min == height[left]) {
                      left++;
                  } else {
                      right--;
                  }
              }
              return max;
          }
      }

      好啦!本期 双指针算法专题(1)的学习之旅就到此结束啦!我们下一期再一起学习吧!

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.csdn.net/2301_80854132/article/details/141891723,作者:我要学编程(ಥ_ಥ),版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:时间与空间复杂度(详解)

      下一篇:双指针算法专题(2)

      相关文章

      2025-05-19 09:04:22

      loki仿函数原理

      loki仿函数原理

      2025-05-19 09:04:22
      lt , void
      2025-05-19 09:04:14

      复杂度的OJ练习

      复杂度的OJ练习

      2025-05-19 09:04:14
      代码 , 复杂度 , 思路 , 数组 , 算法
      2025-05-19 09:04:14

      二叉树经典OJ练习

      二叉树经典OJ练习

      2025-05-19 09:04:14
      root , 二叉树 , 子树 , 节点 , 遍历
      2025-05-19 09:04:14

      《剑指Offer》搜索算法题篇——更易理解的思路~

      《剑指Offer》搜索算法题篇——更易理解的思路~

      2025-05-19 09:04:14
      算法
      2025-05-19 09:04:14

      背包问题——“0-1背包”,“完全背包”(这样讲,还能不会?)

      背包问题——“0-1背包”,“完全背包”(这样讲,还能不会?)

      2025-05-19 09:04:14
      动态规划 , 算法
      2025-05-16 09:15:24

      jQuery遍历对象、数组、集合

      jQuery遍历对象、数组、集合

      2025-05-16 09:15:24
      jQuery , 对象 , 数组 , 遍历 , 集合
      2025-05-16 09:15:24

      如何将一串数字用函数的方法倒过来(C语言)

      如何将一串数字用函数的方法倒过来(C语言)

      2025-05-16 09:15:24
      函数 , 数字 , 数组
      2025-05-16 09:15:17

      BFS解决最短路问题(4)_为高尔夫比赛砍树

      BFS解决最短路问题(4)_为高尔夫比赛砍树

      2025-05-16 09:15:17
      BFS , lt , 复杂度 , 算法
      2025-05-16 09:15:17

      多源BFS问题(2)_飞地的数量

      多源BFS问题(2)_飞地的数量

      2025-05-16 09:15:17
      bfs , grid , 单元格 , 算法
      2025-05-16 09:15:17

      BFS解决拓扑排序(1)_课程表

      BFS解决拓扑排序(1)_课程表

      2025-05-16 09:15:17
      lt , 课程 , 队列
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5219579

      查看更多

      最新文章

      背包问题——“0-1背包”,“完全背包”(这样讲,还能不会?)

      2025-05-19 09:04:14

      《剑指Offer》搜索算法题篇——更易理解的思路~

      2025-05-19 09:04:14

      递归,搜索,回溯算法(3)之穷举,暴搜,深搜,回溯,剪枝

      2025-05-16 09:15:17

      多源BFS问题(2)_飞地的数量

      2025-05-16 09:15:17

      BFS解决最短路问题(4)_为高尔夫比赛砍树

      2025-05-16 09:15:17

      多源BFS问题(4)_地图分析

      2025-05-16 09:15:17

      查看更多

      热门文章

      前端项目实战66-数组数据处理详解

      2023-05-12 06:47:16

      Lc70_爬楼梯

      2024-06-27 09:20:52

      利用函数求出一个数组最大三个数的乘积

      2023-02-13 08:10:07

      冒泡排序法解析

      2024-07-01 01:30:59

      猜字母问题

      2023-02-24 08:30:41

      1791. 找出星型图的中心节点

      2023-02-13 07:55:59

      查看更多

      热门标签

      算法 leetcode python 数据 java 数组 节点 大数据 i++ 链表 golang c++ 排序 django 数据类型
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      【算法】贪心算法

      一块金条切成两半,是需要花费和长度数值一样的铜板的。

      [leetcode] 47. Permutations II

      DS初阶:二叉树的顺序结构及堆的实现

      202. 快乐数

      有一组 n 个人作为实验对象,从 0 到 n - 1 编号,其中每个人都有不同数目的钱, 以及不同程度的安静值(quietness) 为了方便起见,我们将编号为 x 的人简称为"person x "。

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号