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

用户体验做的好的网站网络课程教学平台

用户体验做的好的网站,网络课程教学平台,江苏seo策略,wordpress 500 安装1.移除元素 int removeElement(int* nums, int numsSize, int val) {int dst 0; // 慢指针&#xff0c;用于收集非目标值元素// 遍历整个数组for (int src 0; src < numsSize; src) {// 如果当前元素不等于要删除的值if (nums[src] ! val) {// 保留该元素(复制到dst位置)…

1.移除元素

int removeElement(int* nums, int numsSize, int val) {int dst = 0;  // 慢指针,用于收集非目标值元素// 遍历整个数组for (int src = 0; src < numsSize; src++) {// 如果当前元素不等于要删除的值if (nums[src] != val) {// 保留该元素(复制到dst位置)并移动dstnums[dst] = nums[src];dst++;}// 如果当前元素等于要删除的值,只移动src,不做其他操作}// 返回新数组的长度,即dst的值return dst;
}

我们用可视化的方法来看这道题:

目标:把 [😈, 😊, 😊, 😈] 中所有 😈 移除,留下 [😊, 😊],返回新长度 2。

初始状态:

数组: [😈, 😊, 😊, 😈]  (其中😈代表值3,😊代表值2)dst src

第一轮:检查src=0时

检查: nums[src](😈) == val(😈)吗?✅ 是要删除的! 跳过它!src++ 向后移动一位
数组: [😈, 😊, 😊, 😈]dst  src

第二轮:检查src=1时

检查: nums[src](😊) == val(😈)吗?❌ 不是! 这是要保留的!dst复制+移动,src继续++
数组: [😊, 😊, 😊, 😈]dst  src

第三轮:检查src=2时

检查: nums[src](😊) == val(😈)吗?❌ 不是! 又是要保留的元素!
dst复制+移动,src++数组: [😊, 😊, 😊, 😈]dst src

第四轮:检查src=3时

检查: nums[src](😈) == val(😈)吗?✅ 是要删除的! 跳过它!
src++(超出范围)数组: [😊, 😊, 😊, 😈]dst     src(出界)

最终结果:

更新后数组: [😊, 😊, 😊, 😈]👆dst=2返回值: dst = 2

用mermaid做出的流程图:

2.删除重复元素

先上完整代码,再来可视化 

int removeDuplicates(int* nums, int numsSize) {if (numsSize == 0) return 0;int dst = 0;  // 慢指针,指向当前无重复区域的末尾// 从索引1开始遍历数组for (int src = 1; src < numsSize; src++) {// 如果发现一个新元素(与慢指针指向的元素不同)if (nums[src] != nums[dst]) {// 将慢指针前移,并复制这个新元素dst++;nums[dst] = nums[src];}// 如果元素重复,只移动快指针,不做其他操作}// 返回无重复区域的长度 = dst + 1return dst + 1;
}

目标:把 [1, 1, 2, 3, 3, 4] 变成 [1, 2, 3, 4],返回新长度 4。

初始状态:

数组: [1,  1,  2,  3,  3,  4]dst src

第一轮:检查src=1(值1)

比较: nums[dst]=1 VS nums[src]=1🤔 一样! 不需要保留
src++
数组: [1, 1, 2, 3, 3, 4]dst   src

第二轮:检查src=2(值2)

比较: nums[dst]=1 VS nums[src]=2😲 不一样! 发现新数字
dst移动+复制新数字 
数组: [1,  2,  2,  3,  3,  4]dst src
src++
数组: [1,  2,  2,  3,  3,  4]dst     src

第三轮:检查src=3(值3)

比较: nums[dst]=2 VS nums[src]=3😲 不一样! 又一个新数字
dst移动+复制新数字
数组: [1,  2,  3,  3,  3,  4]dst src
src++
数组: [1,  2,  3,  3,  3,  4]dst     src

第四轮:检查src=4(值3)

比较: nums[dst]=3 VS nums[src]=3🤔 一样! 跳过这个重复的
src++
数组: [1,  2,  3,  3,  3,  4]dst         src

第四轮:检查src=5(值4)

比较: nums[dst]=3 VS nums[src]=4😲 不一样! 最后一个新数字
dst移动+复制新数字
数组: [1,  2,  3,  4,  3,  4]dst     srcsrc++
数组: [1,  2,  3,  4,  3,  4]dstsrc(出界)

最终结果:

更新后数组: [1, 2, 3, 4, 3, 4]👆dst=3返回值: dst+1 = 4

mermaid生成的流程图:

3.合并两个有序数组

 

依旧是先来代码,再进行可视化

void merge(int* nums1, int m, int* nums2, int n) {int l1 = m - 1;    // 指向nums1最后一个有效元素int l2 = n - 1;    // 指向nums2最后一个元素int l3 = m + n - 1;  // 指向合并后数组的末尾位置// 从后往前合并,每次选取较大的元素放到nums1的末尾while (l1 >= 0 && l2 >= 0) {// 将较大的元素放到l3指向的位置if (nums1[l1] > nums2[l2]) {nums1[l3--] = nums1[l1--];} else {nums1[l3--] = nums2[l2--];}}// 如果nums2还有剩余元素,将它们复制到nums1// 注意: 如果nums1还有剩余元素,它们已经在正确位置上,不需要移动while (l2 >= 0) {nums1[l3--] = nums2[l2--];}
}

 目标:将 [1, 2, 3, 0, 0, 0] (nums1) 和 [2, 5, 6] (nums2) 合并成 [1, 2, 2, 3, 5, 6]

初始状态:

nums1: [1, 2, 3, 0, 0, 0]l1       l3
nums2: [2, 5, 6]l2

 第一轮:比较l1和l2

谁更大? nums1[l1]=3 VS nums2[l2]=6❌           ✅ 
nums2元素更大! 6 → 放到l3指向的位置 && l2,l3同时向前移动一位nums1: [1, 2, 3, 0, 0, 6]l1    l3
nums2: [2, 5, 0]l2

第二轮:比较l1和l2

谁更大? nums1[l1]=3 VS nums2[l2]=5❌           ✅ 
nums2元素更大! 5 → 放到l3指向的位置  &&  l2,l3同时向前移动一位
nums1: [1, 2, 3, 0, 5, 6]l1 l3
nums2: [2, 0, 0]l2

第三轮:比较l1和l2

谁更大? nums1[l1]=3 VS nums2[l2]=2✅           ❌ 
nums1元素更大! 3 → 放到l3指向的位置  &&  l1,l3同时向前移动一位
nums1: [1, 2, 3, 3, 5, 6]l1 l3
nums2: [2, 0, 0]l2

第四轮:比较l1和l2

谁更大? nums1[l1]=2 VS nums2[l2]=2🤝 平手! 按规则用nums2的
nums2的2 → 放到l3指向的位置  &&  l2,l3同时向前移动一位
nums1: [1, 2, 2, 3, 5, 6]l1l3
nums2: [0, 0, 0]l2(出界)

最终检查:l2已经<0,说明nums2元素已全部放入,而nums1剩余元素已经在正确位置,不需要移动。

mermaid生成的流程图:

4.总结

4.1 三种方法对比

特性合并有序数组删除重复元素移除元素
指针方向从后往前从前往后从前往后
指针数量3个2个2个
慢指针功能定位放置位置标记不重复元素边界收集需保留的元素
快指针功能比较选择元素探索新元素筛选有效元素
元素处理每次选较大的只保留不重复的只保留非目标值
返回值无需返回dst+1dst

4.2 时间复杂度分析

算法时间复杂度空间复杂度
合并有序数组O(m+n)O(1)
删除重复元素O(n)O(1)
移除元素O(n)O(1)

 4.3双指针法的核心思想

  • 空间效率:所有算法都是原地操作,不需要额外空间

  • 指针分工

    • 慢指针:通常负责构建结果或标记边界

    • 快指针:负责探索或提供数据

  • 处理策略

    • 元素保留:满足特定条件时复制并移动慢指针

    • 元素丢弃:不满足条件时只移动快指针


文章转载自:

http://10J5VOyi.tzrmp.cn
http://I9KHufE8.tzrmp.cn
http://xwAG1k98.tzrmp.cn
http://WOFFDuKW.tzrmp.cn
http://dpRRHQyi.tzrmp.cn
http://e4xWTpKD.tzrmp.cn
http://SJYbFy2G.tzrmp.cn
http://SBQZ0jQy.tzrmp.cn
http://gmNmwbKq.tzrmp.cn
http://EtXQ7OEs.tzrmp.cn
http://QVVka8x0.tzrmp.cn
http://YrXMu9xS.tzrmp.cn
http://hnfN5PhG.tzrmp.cn
http://VscbB7hR.tzrmp.cn
http://Ctk97ARI.tzrmp.cn
http://aR0w1Glk.tzrmp.cn
http://L2UIVFcU.tzrmp.cn
http://nce8uip6.tzrmp.cn
http://a5CrGRQU.tzrmp.cn
http://hiOtI2jm.tzrmp.cn
http://XuTvRABV.tzrmp.cn
http://HHLwKNYi.tzrmp.cn
http://gUJFhHeg.tzrmp.cn
http://RtMEiM1K.tzrmp.cn
http://CFs28BsA.tzrmp.cn
http://BZahtCgT.tzrmp.cn
http://yR5mmgGP.tzrmp.cn
http://4YzH2hg9.tzrmp.cn
http://oCdYfNZe.tzrmp.cn
http://ez2Ty3UQ.tzrmp.cn
http://www.dtcms.com/wzjs/672077.html

相关文章:

  • 中山工程建设信息网站wordpress网站图片
  • 二级域名做很多网站中国空间站vr全景
  • 昆山企业网站建设网站开发一般用什么开发语言
  • 两学一做学习网站献县做网站价格
  • 长沙网页网站制作视频营销成功的案例
  • 搜索引擎优化网站排名网站建设 今网科技
  • 公司网站是用什么软件做wordpress commentor
  • 青岛网站开发虚拟物品网站制作模板
  • 台州市建设招标投标网站做网站刷东西
  • 企业网站设计概念成都旅游学院
  • 网站推广的工具网站开发 渠道
  • thinkphp 网站模板西安直播网站开发
  • 建设文库网站网站建设费会计处理
  • 无法解析您网站的域名.外贸网站商城
  • 哪些网站做问卷可以赚钱电商网站做互联网金融
  • 网站降权恢复中国经济总量
  • wap卖料建站系统wordpress连接memcached
  • 图片生成链接的网站企业微网站案例
  • 泰安聊城网站建设建站工具cms
  • 做论文常用网站做公司网站要走哪些流程
  • 郑州建设网站黔西南州做网站
  • golang做网站建筑规范app
  • 服装网站模板seo运营是什么意思
  • 门户网站的运营公众号 创意名字
  • 网站建设实施步骤宝塔搭建app教程
  • 中国做类似 esty的网站管理类培训课程
  • 手机网站前端如何建网站赚取佣金
  • 啥十小企业网站建设网上买吃的网站做代理
  • 网站制作的相关术语有哪些企业网站的页面特点
  • 西安网站到首页排名站长工具流量统计