删除排序数组中的重复数字
2016-05-13 15:38
218 查看
题目描述:给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。
样例:给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。
主要是看清题目,题目要求是三点:
1. 返回去重后数组的长度
2. 原数组要变,变成没有重复元素的,但是不用返回
3. 没有额外空间(也就是说不能新建一个数组,或者使用类似于set这样的结构来做题)
那就用一个temp值保存当前元素值,对比是否重复,重复了就删。好在数组是排好序的,不会出现重复元素不在一起的情况。
class Solution:
"""
@param A: a list of integers
@return an integer
"""
def removeDuplicates(self, A):
if len(A) == 0:
return 0
temp = A[0]
index = 1
while index != len(A):
if A[index] == temp:
A.pop(index)
else:
temp = A[index]
index += 1
return index + 1
# write your code here代码的逻辑非常简单,但是有一点特别需要注意,就是碰到这种需要删除元素的数组,进行遍历时,尽量用while循环,通过下标和变动数组长度的关系来控制循环结束的条件,尽量不要使用以下这种循环:
for i in A:
if i == temp:
A.remove(i)这种写法,极容易出错。
样例:给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。
主要是看清题目,题目要求是三点:
1. 返回去重后数组的长度
2. 原数组要变,变成没有重复元素的,但是不用返回
3. 没有额外空间(也就是说不能新建一个数组,或者使用类似于set这样的结构来做题)
那就用一个temp值保存当前元素值,对比是否重复,重复了就删。好在数组是排好序的,不会出现重复元素不在一起的情况。
class Solution:
"""
@param A: a list of integers
@return an integer
"""
def removeDuplicates(self, A):
if len(A) == 0:
return 0
temp = A[0]
index = 1
while index != len(A):
if A[index] == temp:
A.pop(index)
else:
temp = A[index]
index += 1
return index + 1
# write your code here代码的逻辑非常简单,但是有一点特别需要注意,就是碰到这种需要删除元素的数组,进行遍历时,尽量用while循环,通过下标和变动数组长度的关系来控制循环结束的条件,尽量不要使用以下这种循环:
for i in A:
if i == temp:
A.remove(i)这种写法,极容易出错。
相关文章推荐
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#比较二个数组并找出相同或不同元素的方法
- C#动态调整数组大小的方法
- 详解Lua中的数组概念知识
- Perl中的列表和数组学习笔记
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- Linux Shell 数组建立及使用技巧
- PowerShell数组的一些操作技巧
- C#通过yield实现数组全排列的方法
- C#不重复输出一个数组中所有元素的方法
- C#实现将数组内元素打乱顺序的方法
- C#中用foreach语句遍历数组及将数组作为参数的用法
- 详解C#编程中一维数组与多维数组的使用
- Ruby简明教程之数组和Hash介绍
- 深入解析C#中的交错数组与隐式类型的数组
- C语言查找数组里数字重复次数的方法