想提升一下自己算法能力,于是开始自己的刷题之路,以此篇记录一下
先从数组类型题目开始
Problem: 26. 删除有序数组中的重复项
思路
一开始觉得题目要求的内存完全不够用,然后看了一眼别人的解题(大佬们太厉害了),想到可以把一个数组当两个用,边判断边重写这个数组,因为是升序数组所以重写的时候不会影响判断
解题方法
设置index指向要修改的位置,如果后一个数字和前一个数字一样的话那index就不进行移动,如果不一样就后移以此来去除重复的数据,同时还能让index作为长度返回
复杂度
- 时间复杂度:
O(n)
- 空间复杂度:
O(1)
Code
class Solution {
public int removeDuplicates(int[] nums) {
int i,index=0;
for(i=1;i<nums.length;i++)
{
if(nums[i]!=nums[i-1])
index++;
nums[index]=nums[i];
}
return index+1;
}
}