LeetCode之双指针(2)
来源:互联网 发布:礼券自助提货系统源码 编辑:程序博客网 时间:2024/05/18 16:17
75. Sort Colors
题目链接:
https://leetcode.com/problems/sort-colors/
题目描述:
一个数组中乱序放着数值0,1,2。将其按数值0,1,2的顺序重排。
比如[1,0,2] =>[0,1,2]
题目分析:
最直接的是计数排序,把0有多少个,1有多少个,2有多少个记录下来,然后在循环赋值。两次循环搞定。
如果要一次循环的话,用low与high指针,low代表第一个1所在下标位置,high代表第一个2所在下标位置。i循环遍历,当i与high相遇代表排好了,在遍历时如果nums[i]==0就与nums[low]交换,low++前进,i++前进,如果nums[i]==2就与nums[high]交换,high–前进。有一个需要注意,在nums[i]==2与nums[high]交换时,nums[high]存放的可能为0,也可能为1,当交换后nums[i]=0或1,如果i++,即i前进了,且如果nums[i]==0,就没有完成与nums[low]的交换,此时i位置的数,就相当于没有排。
代码:
class Solution {public: void sortColors(vector<int>& nums) { int len=nums.size(); int low=0,high=len-1; for(int i=0;i<=high;i++){ if(nums[i]==0){ swap(nums[low++],nums[i]); } else if(nums[i]==2){ swap(nums[high--],nums[i--]); } } }};
26. Remove Duplicates from Sorted Array
题目链接:
https://leetcode.com/problems/remove-duplicates-from-sorted-array/
题目描述:
不使用额外的空间,将排好序的数组中重复的元素去除。
题目分析:
唯一的难点就是不使用额外的空间。
代码:
class Solution {public: int removeDuplicates(vector<int>& nums) { int len = nums.size(); if (len == 0) { return 0; } int cnt = 1; for (int i = 1; i < len; i++) { if(nums[i]!=nums[cnt-1]) { nums[cnt++] = nums[i]; } } return cnt; }};
80. Remove Duplicates from Sorted Array II
题目链接:
https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/
题目描述:
将一个排好序的数组,保证数组中每个数字最多出现两次的条件下,将数组中多余的元素去除,返回新数组的长度。
题目分析:
因为是排好序的,所以不是很麻烦。跟之前的那道题差不多啊。
代码:
class Solution {public: int removeDuplicates(vector<int>& nums) { int len=nums.size(); if(len<=2){ return len; } int cur=2; for(int i=2;i<len;i++){ if(nums[i]!=nums[cur-2]){ nums[cur++]=nums[i]; } } return cur; }};
0 0
- LeetCode之双指针(2)
- LeetCode之双指针(1)
- LeetCode之双指针(3)
- LeetCode 之双指针 two pointers
- LeetCode|【双指针】
- 双指针-Leetcode
- Leetcode双指针16
- leetcode链表拷贝之随机指针
- leetcode ---双指针+滑动窗口
- LeetCode 之K-Sum 问题(个人理解) 双指针大法(总结)
- leetcode之双指针类-----OJ 228/15/16/18/26/80/121/75
- 野指针之2
- 双指针,前后指针法, 快排思路, leetcode
- leetcode 287. Find the Duplicate Number 双指针 + 快慢指针
- [Leetcode][双指针/多指针]相关题目汇总/分析/总结
- leetcode之有随机指针的链表深拷贝
- LeetCode:Valid Palindrome双指针 java版
- leetcode Minimum Size Subarray Sum 双指针
- 《iOS Human Interface Guidelines》——Notifications
- 【LEETCODE】216-Combination Sum III [Python]
- 通过ModelAndView返回页面,但是空白页面
- C# 序列化和反序列化
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- LeetCode之双指针(2)
- SimpleConfig结果显示导致app崩溃
- 图像的 2DPCA 与 2D2DPCA 特征提取
- QTcpSocket 及 TCP粘包分析
- 使用UncaughtExceptionHandler重启线程
- 再次复习java正则表达式
- Baidu地图的相关开发经验
- Python中的下划线(译文)
- Java停止线程