一、Contains Duplicate

Given an array of integers, find if the array contains any duplicates. Your function should return true if any value appears at least twice in the array, and it should return false if every element is distinct.

分析:先把数组排个序,然后遍历排序后的数组,查看相邻元素是否有重复,时间复杂度O(nlogn)。

class Solution {
public:
bool containsDuplicate(vector<int>& nums) { if( (nums.size() == 0) || (nums.size() == 1) ) return false; std::sort(std::begin(nums), std::end(nums)); //sort()是c++、java里对数组的元素进行排序的方法,包含于头文件algorithm。 for(int i = 0; i < nums.size()-1; i++)
if(nums[i] == nums[i+1]) return true; return false;
}
}; 

其他解法:(集和多集的区别是:set支持唯一键值,set中的值都是特定的,而且只出现一次;而multiset中可以出现副本键,同一值可以出现多次。)

class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
set<int> s(nums.begin(), nums.end());
if (nums.size() == s.size()) return false;
else return true;
}
};

或者:

class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
vector <bool> vec;
vec.push_back(false);
if (nums.size()<=1){
return false;
}
for (int i=0; i<nums.size();i++){
int m=nums[i];
if (m>=vec.size()){
for (int j=vec.size();j<=m;j++){
vec.push_back(false);
}
}
if (m<vec.size()){
if (vec[m]==true){
return true;
}
else{
vec[m]=true;
}
}
}
return false;
}
};

 或:sort the vector then traverse to find whether there are same value element continuesly:

class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
sort(nums.begin(), nums.end());
if (nums.size() == 0){
return false;
}
vector<int>::iterator it = nums.begin();
int temp = *it;
it++;
for (; it != nums.end(); it++){
if (*it == temp){
return true;
}
temp = *it;
} return false;
}
};

或: step 1 Sort the vector
step2 use erase to remove the duplicate and compare the size of the vector

class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
int pre = nums.size(); sort(nums.begin(), nums.end());
nums.erase(unique(nums.begin(), nums.end()), nums.end()); int post = nums.size(); return (post == pre) ? false : true;
return false;
}
};

或:use hash map

class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_map<int, int> hash;
vector<int>::iterator it = nums.begin(); for (; it != nums.end(); it++){
if (hash.find(*it) != hash.end()){
return true;
}
hash[*it] = 1;
} return false;
}
};

二、Contains Duplicate II

Given an array of integers and an integer k, find out whether there there are two distinct indices i and j in the array such that nums[i] = nums[j] and the difference between iand j is at most k.(注:at most 最多)

分析:题意为---给一个整型数组及整数k,找出是否存在不同的i和j使得nums[i] = nums[j]且i 和j之差最多为k

代码如下:

The basic idea is to maintain a set s which contain unique values from nums[i - k] to nums[i - 1], if nums[i] is in set s then return true else update the set.

class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k)
{
unordered_set<int> s; if (k <= 0) return false;
if (k >= nums.size()) k = nums.size() - 1; for (int i = 0; i < nums.size(); i++)
{
if (i > k) s.erase(nums[i - k - 1]);
if (s.find(nums[i]) != s.end()) return true;
s.insert(nums[i]);
} return false;
}
};

  或:

class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
if (!k)
return false; // fill set
unordered_set<int> h;
size_t size = k<nums.size()?k:nums.size();
for(int i=0;i<size;++i){
if(h.find(nums[i])!=h.end()) //find(value)返回value所在位置,找不到value将返回end()
return true;
h.insert(nums[i]);
}
// check dublicates
size = nums.size();
for(int i=k;i<size;++i){
if(h.find(nums[i])!=h.end())
return true;
h.erase(nums[i-k]); //erase(value) 移除set容器内元素值为value的所有元素,返回移除的元素个数
h.insert(nums[i]);
}
return false;
}
};

或:

其中:unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除。他是c++中的函数,所以头文件要加#include<iostream.h>,具体用法如下:

int num[100];

unique(num,mun+n)返回的是num去重后的尾地址,之所以说比不真正把重复的元素删除,其实是,该函数把重复的元素一到后面去了,然后依然保存到了原数组中,然后返回去重后最后一个元素的地址,因为unique去除的是相邻的重复元素,所以一般用之前都会要排一下序。

class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
if(nums.empty()||k<1)
return false;
vector<int> temp=nums;
sort(temp.begin(),temp.end());
auto it=unique(temp.begin(),temp.end());
if(it==temp.end())
return false;
for(auto it1=nums.begin();it1!=nums.end()-1;++it1){
auto it2=find(it1+1,nums.end(),*it1); //从it1+1到nums.end()查找与指向it1的值相同的索引
if(it2!=nums.end()){
if(it2-it1<=k){
return true;
}
}
}
return false;
} };

  

 

  

  

  

 

leetcode:Contains Duplicate和Contains Duplicate II的更多相关文章

  1. LeetCode(220) Contains Duplicate III

    题目 Given an array of integers, find out whether there are two distinct indices i and j in the array ...

  2. [LeetCode] 95. Unique Binary Search Trees II(给定一个数字n,返回所有二叉搜索树) ☆☆☆

    Unique Binary Search Trees II leetcode java [LeetCode]Unique Binary Search Trees II 异构二叉查找树II Unique ...

  3. 【python】Leetcode每日一题-反转链表 II

    [python]Leetcode每日一题-反转链表 II [题目描述] 给你单链表的头节点 head 和两个整数 left 和 right ,其中 left <= right .请你反转从位置 ...

  4. 【LeetCode】522. Longest Uncommon Subsequence II 解题报告(Python)

    [LeetCode]522. Longest Uncommon Subsequence II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemin ...

  5. 【LeetCode】217 & 219 - Contains Duplicate & Contains Duplicate II

     217 - Contains Duplicate Given an array of integers, find if the array contains any duplicates. You ...

  6. [Leetcode] Remove duplicate from sorted list ii 从已排序的链表中删除重复结点

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

  7. 【leetcode❤python】 219. Contains Duplicate II

    #-*- coding: UTF-8 -*-#遍历所有元素,将元素值当做键.元素下标当做值#存放在一个字典中.遍历的时候,#如果发现重复元素,则比较其下标的差值是否小于k,#如果小于则可直接返回Tru ...

  8. LeetCode(219) Contains Duplicate II

    题目 Given an array of integers and an integer k, find out whether there are two distinct indices i an ...

  9. LeetCode Array Easy 219. Contains Duplicate II

    ---恢复内容开始--- Description Given an array of integers and an integer k, find out whether there are two ...

随机推荐

  1. [HTML/CSS]display:none和visibility:hidden的区别

    写在前面 在群里有朋友问这样一个问题,display:none的标签,影响了布局.这就引出了本篇这样的问题,印象中display:none的块元素是不占位置的. 一个例子 <!DOCTYPE h ...

  2. 帝国cms数据还原后提示数据库表不存在怎么解决?

    下午,ytkah用帝国cms在wamp调试时发现了一个问题,还原备份好的数据后更新的页面提示数据库表不存在,查看了phpmyadmin分类的数据库表实际上是存在的,这个是怎么回事呢?重新搭建一个新站点 ...

  3. JS数据类型的理解(猜测)

    Js 数据类型 对于这个主题,首先来看几个问题,如果你对这几个问题很清楚的话,那就请直接跳过吧,不用接着往下看了,如果不清楚,建议你还是看看. 1)如果判断函数?function 和object的联系 ...

  4. sql server 时间

    sql server 获取月份天数:1,SELECT 32-DAY(CAST('2015-03-01' as datetime)+32-DAY(CAST('2015-03-01' as datetim ...

  5. 如何实现Windows Phone代码与Unity相互通信(插件方式)

    原地址:http://www.cnblogs.com/petto/p/3915943.html 一些废话 原文地址: http://imwper.com/unity/petto/%E5%A6%82%E ...

  6. ubuntu修改ip、网关、dns等

    一.使用命令设置Ubuntu IP地址 1.修改配置文件blacklist.conf禁用IPV6 sudo vi /etc/modprobe.d/blacklist.conf 表示用vi编辑器(也可以 ...

  7. MySQL数据库数据类型之集合类型SET测试总结

    MySQL数据库提供针对字符串存储的一种特殊数据类型:集合类型SET,这种数据类型可以给予我们更多提高性能.降低存储容量和降低程序代码理解的技巧,前面介绍了首先介绍了四种数据类型的特性总结,其后又分别 ...

  8. php7 安装 及和php5的共存

    http://blog.csdn.net/liuxinmingcode/article/details/50319145 LNMP FastCGI 是一个可伸缩地.高速地在HTTP server和动态 ...

  9. iOS视频压缩

    // // ViewController.m // iOS视频测试 // // Created by apple on 15/8/19. // Copyright (c) 2015年 tqh. All ...

  10. 传说中的WCF(2):服务协定的那些事儿

    上一篇文章中,我们抛出了N个问题:WCF到底难不难学?复杂吗?如果复杂,可以化繁为简吗? 其实,这些问题的答案全取决于你的心态,都说“态度决定一切”,这句话,不知道各位信不信,反正我是信了.首先,敢于 ...