数组重复元素之类问题的整理
主要是原地删除,O(1) 空间,很是巧妙
func removeDuplicates(nums []int) int {
//O(1)空间复杂
if len(nums)==0{
return 0
}
tmp:=0
//不同,tmp+1,放在相应位置
for i:=1;i<len(nums);i++{
if nums[tmp]!=nums[i]{
tmp++
nums[tmp]=nums[i]
}
}
return tmp+1 //返回tmp+1 因为系统测评是最大下标在tmp
}
最多重复两次,空间O(1)
和排序数组类似,重复数字只保留一个
func deleteDuplicates(head *ListNode) *ListNode {
if head==nil||head.Next==nil{
return head
}
cur:=head
next:=head.Next
for next!=nil{
if cur.Val!=next.Val{
cur.Next = next
cur = cur.Next
}
next = next.Next
}
cur.Next = nil
return head
}
删除所有的重复元素
判断是否存在重复元素
map一边判断一边加
func containsDuplicate(nums []int) bool {
//map即可
hash:=make(map[int]int)
for i:=0;i<len(nums);i++{
if _,ok:=hash[nums[i]];ok{
return true
}
hash[nums[i]]=1
}
return false
}
原文:https://www.cnblogs.com/9527s/p/14377157.html