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.

第一种方法:set数据结构,count函数记录数是否出现过,耗时96ms

用数据结构set来做。由于他是红黑树为底层,所以查找某个元素时间浮渣度较低,而且set不同意同样元素出现

假设某个元素的count为0则。插入到set,假设不为0,return false

set的查找时间为O(lg(N))所以终于时间浮渣度为O(Nlg(N))

class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
if(nums.empty())
return false;
set<int> s;
s.insert(nums[0]);
for(int i=1;i<nums.size();i++)
{
if(!s.count(nums[i]))
s.insert(nums[i]);
else
return true;
}
return false;
}
};

或者set直接查找,100ms:

//思路首先:set查找
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
set<int> st;
//for (auto i : nums) {
for(int i=0;i<nums.size();i++)
{
if (st.find(nums[i]) != st.end())
return true;
st.insert(nums[i]);
}
return false;
}
};

另外一种方法:map数据结构,count函数记录数是否出现过。96ms

//思路首先:
//既然能够用set来做,那么map来做也是能够的
//由于map不同意关键值反复(但实值能够),道理和set一样,都是红黑树为底层,本方法96ms完毕測试案例
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
if(nums.empty())
return false;
map<int, int> mapping;
for (int i = 0; i<nums.size(); i++) {
if(mapping.count(nums[i]))//假设该数出现过
return true;
mapping.insert(pair<int, int>(nums[i], i));//将nums[i]存储为关键值,实值在这里无所谓
}
return false;
}
};

或者map直接查找,100ms:

//思路首先:map查找
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
if(nums.empty())
return false;
map<int, int> mapping;
for (int i = 0; i<nums.size(); i++) {
if(mapping.find(nums[i]) != mapping.end())//查找该数是否出现过
return true;
mapping.insert(pair<int, int>(nums[i], i));//将nums[i]存储为关键值,实值在这里无所谓
}
return false;
}
};

第三种方法:先排序,再遍历一遍。检查数是否出现过。40ms

//思路首先:先排序。再遍历一遍是否有同样值。所以终于时间浮渣度为O(Nlg(N)+N),本方法40ms完毕測试案例
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
if(nums.empty())
return false;
sort(nums.begin(), nums.end());
for (int i = 1; i < nums.size(); i++) {
if (nums[i-1] == nums[i])
return true;
}
return false;
}
};

第四种方法:哈希法。检查数是否出现过。48ms

//思路首先:hash法
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> hashset;
//for (auto i : nums) {
for(int i=0;i<nums.size();i++)
{
if (hashset.find(nums[i]) != hashset.end())
return true;
hashset.insert(nums[i]);
}
return false;
}
};

有一个数组和一个整数,推断数组中是否存在两个同样的元素相距小于给定整数k。若是则返回真。

Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the difference between i and jis at most k.

分析:

哈希map(不要用红黑树map)

遍历数组。首先看当前元素是否在map中。如不在则压入,若在看是否其相应下标和当前下标相距为k

假设不则将原元素改动为如今的下标

class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
if(nums.empty())
return false;
unordered_map<int,int> umapping;
umapping[nums[0]]=0;
for(int i=1;i<nums.size();i++)
{
//if(umapping.count(nums[i]) == 0)//没有出现(统计函数)
if(umapping.find(nums[i]) == umapping.end())//直接查找
umapping[nums[i]]=i;
else if((i-umapping[nums[i]])<=k)//相距小于k
return true;
else
umapping[nums[i]]=i;
}
return false;
}
};

注:本博文为EbowTang原创。兴许可能继续更新本文。

假设转载,请务必复制本条信息。

原文地址:http://blog.csdn.net/ebowtang/article/details/50443891

原作者博客:http://blog.csdn.net/ebowtang

&lt;LeetCode OJ&gt; 217./219. Contains Duplicate (I / II)的更多相关文章

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

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

  2. 217/219. Contains Duplicate /Contains Duplicate II

    原文题目: 217. Contains Duplicate 219. Contains Duplicate II 读题: 217只要找出是否有重复值, 219找出重复值,且要判断两者索引之差是否小于k ...

  3. 【LeetCode OJ】Binary Tree Level Order Traversal II

    Problem Link: https://oj.leetcode.com/problems/binary-tree-level-order-traversal-ii/ Use BFS from th ...

  4. LeetCode OJ:Search in Rotated Sorted Array II(翻转排序数组的查找)

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  5. LeetCode OJ 107. Binary Tree Level Order Traversal II

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  6. LeetCode OJ 82. Remove Duplicates from Sorted List II

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

  7. LeetCode OJ 80. Remove Duplicates from Sorted Array II

    题目 Follow up for "Remove Duplicates": What if duplicates are allowed at most twice? For ex ...

  8. LeetCode OJ:Remove Duplicates from Sorted List II(链表去重II)

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

  9. LeetCode OJ:Spiral MatrixII(螺旋矩阵II)

    Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ...

随机推荐

  1. chrome 此网页正试图从未经验证的来源加载脚本

      chrome 此网页正试图从未经验证的来源加载脚本 CreateTime--2018年5月25日08点02分 Author:Marydon 1.情景还原 以我的网站为例,https://www.c ...

  2. Spring 基于Aspectj切面表达式

    package com.proc; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; im ...

  3. android TextView异常换行层次不齐的问题

    关于TextView异常换行,参差不齐问题分析:每行的开头的第一个字符如果是字母,数字,标点符号以及特殊字符 可能是由于都是半角字符,所以需要转化成全角字符 解决方法是: public String ...

  4. 转: Linux网络编程 【8】五种I/O 模式

    五种I/O 模式:[1]        阻塞 I/O           (Linux下的I/O操作默认是阻塞I/O,即open和socket创建的I/O都是阻塞I/O)[2]        非阻塞 ...

  5. cocos2d-x 源代码分析 : EventDispatcher、EventListener、Event 源代码分析 (新触摸机制,新的NotificationCenter机制)

    源代码版本号来自3.x,转载请注明 cocos2d-x 源代码分析总文件夹 http://blog.csdn.net/u011225840/article/details/31743129 1.继承结 ...

  6. HQL的select new map ···语法

    通常hibernate查询出的结果集是类似于 List<T> 或 List<Object[]> 的类型 类似于下面这个方法 public List<SfJmsfT> ...

  7. Windows下Python添加库(模块)路径

    动态的添加库路径.在程序运行过程中修改sys.path的值,添加自己的库路径 import syssys.path.append(r'your_path') 在Python安装目录下的\Lib\sit ...

  8. cookie是什么? -- web

    cookies是由网络server存储在你电脑硬盘上的一个txt类型的小文件,它和你的网络浏览行为有关,所以存储在你电脑上的cookies就好像你的一张身份证,你电脑上的cookies和其它电脑上的c ...

  9. Lintcode---克隆二叉树

    深度复制一个二叉树. 给定一个二叉树,返回一个他的 克隆品 . 您在真实的面试中是否遇到过这个题? Yes 样例 给定一个二叉树: 1 / \ 2 3 / \ 4 5 返回其相同结构相同数值的克隆二叉 ...

  10. Mysql 逻辑运算符详解

    逻辑运算符又称为布尔运算符,用来确认表达式的真和假.MySQL 支持4 种逻辑运算符,如表4-3 所示. 表4-3                          MySQL 中的逻辑运算符 运算符 ...