从题目名字就可以看出这两道题是相似的,219是217的加强版

217:Contains Duplicate

题目

给予一个数组,判断是否有重复的元素。如果有就返回True,没有就返回False。以下是我第一次想到的方法

解题思路

遍历这个数组,建立一个字典,存储每个不同的数字的出现次数。如果某个元素的出现次数大于1,则表示有重复

class Solution:
# @param {integer[]} nums
# @return {boolean}
def containsDuplicate(self, nums):
count = dict()
for i in range(len(nums)):
if nums[i] not in count:
count[nums[i]] = 1
else:
count[nums[i]] += 1 for i in count:
if count[i] == 1:
pass
else:
return True
return False

这是我开始的解法,提交时间是82ms。提交后我马上想到了个更快的方法:用set消除冗余, 提交时间55ms,快了很多~

class Solution:
# @param {integer[]} nums
# @return {boolean}
def containsDuplicate(self, nums):
temp = len(nums)
s = set(nums)
if temp == len(s):
return False
return True

219: Contains Duplicate II

题目

给予一个数组和一个数字k,判断在这个数组中是否只有一对元素重复,且中间相隔的元素数目不超过k

解题思路

大致思路和217的第一种方法一样,不同的是上一题的字典存储的是元素: 出现次数, 而这时候存储的是元素:[出现次数, 相隔元素个数, 是否有重复元素(布尔值)]

class Solution:
# @param {integer[]} nums
# @param {integer} k
# @return {boolean}
def containsNearbyDuplicate(self, nums, k):
count = dict()
temp = 0
for i in range(len(nums)):
if nums[i] not in count:
count[nums[i]] = [1, i, False]
else:
count[nums[i]] = [count[nums[i]][0] + 1, i - count[nums[i]][1], True] for i in count:
if count[i][2]:
temp += 1
if temp > 1 or temp == 0:
return False for i in count:
if count[i][1] <= k and count[i][2]:
return True
return False

Leetcode算法刷题:217和219题 Contains Duplicate的更多相关文章

  1. leetcode 算法刷题(一)

    今天开始刷Leetcode上面的算法题.我会更新我刷题过程中提交的代码(成功和不成功的都有)和比较好的解法 第二题 Add Two Numbers 题目的意思:输入两个链表,这两个链表都是倒序的数字, ...

  2. leetcode算法刷题(三)

    今天在刷了几道简单的动态规划后,又看了看string方面的题 第五题 Longest Palindromic Substring 题目的意思:求一个字符串的最长回文子串 分析:开始,我的想法是,现在字 ...

  3. leetcode算法刷题(五)——动态规划(三)

    今天的题目不是leetcode上面的.只是觉得动态规划还是不算很熟练,就接着找了点DP的题练练 最长递增子序列的长度 题目的意思:传入一个数组,要求出它的最长递增子序列的长度.例如:如在序列1,-1, ...

  4. leetcode算法刷题(四)——动态规划(二)

    又到了晚上,动态规划,开刷! 第121题 Best Time to Buy and Sell Stock 题目的意思:给予一个数组price,表示特定股票在某天的股价,里面第i个数表示第i天的价格.只 ...

  5. leetcode算法刷题(二)——动态规划(一)

    上次刷了五六道题,都是关于string处理的,这次想换个知识点刷一下,然后再回头刷string的题,当做复习.. 这几天主要会选择动态规划的题目,因为以前从没刷过这方面的东西,很多东西都不是很懂..就 ...

  6. Leetcode算法刷题:第100题 Same Tree

    Same Tree 题目 给予两棵二叉树,判断这两棵树是否相等(即各节点的值都一样) 解题思路 分别遍历两棵二叉树,并用列表分别存储这两棵树的节点的值,比较这两个列表就可以了 class Soluti ...

  7. Leetcode算法刷题:第14题 Longest Common Prefix

    Longest Common Prefix 题目 给予一个列表,元素为字符串,写一个程序找出最长公共前缀 解题思路 先比较两个字符串,如果第一个字符不一样,则返回空值,比较完成后,用这个公共字符串和下 ...

  8. Leetcode算法刷题:第112题 Path Sum

    Path Sum 题目 给予一个二叉树,和一个值su,寻找是否有一个从根节点到叶节点的和为su,有则返回True,没有为False.比如: 5 / \ 4 8 / / \ 11 13 4 / \ \ ...

  9. Leetcode分类刷题答案&心得

    Array 448.找出数组中所有消失的数 要求:整型数组取值为 1 ≤ a[i] ≤ n,n是数组大小,一些元素重复出现,找出[1,n]中没出现的数,实现时时间复杂度为O(n),并不占额外空间 思路 ...

随机推荐

  1. 为js数组扩展方法

    (function(global,undefined){ //javascript冒泡排序,直接添加到基础类型Array的原型上 Function.prototype.method = functio ...

  2. [Javascript]史上最短的IE浏览器判断代码

    今天发现个很有趣的js判断全世界最短的代码,想想之前自己写的判断ie浏览器的,这个实在简单多了 var ie = !+"\v1"; 仅仅需要7bytes!参见这篇文章,<32 ...

  3. java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file” .

    背景:java读取xml文件,xml文件内容只有“<?xml version="1.0" encoding="UTF-8"?>”一行 java读取该 ...

  4. [C++程序设计]用指针变量作函数参数接收数组地址

    #include <iostream> using namespace std; void select_sort(int *p, int n) { int i, j, k; ; i &l ...

  5. Linux GCC

    //test.c #include <stdio.h> int main() { printf("Hello World!\n"); ; } One Shot gcc ...

  6. tomcat之负载均衡(apache反响代理tomcat)

    基于mod_proxy模块 配置内容如下: 准备工作-->检查模块 # httpd -D DUMP_MODULES……………………proxy_module (shared)proxy_balan ...

  7. postgresql创建用户

    (1)内部命令create user 用户名 with superuser password '密码';              先进入数据库后用命令\h create user 查看帮助     ...

  8. python操作redis-为元素排序

    #!/usr/bin/python #!coding:utf-8 import time import redis if __name__ == "__main__": try: ...

  9. TCLP 第一章 1.5字符输入输出

    #include <stdio.h> /* 将输入复制到输出:版本1 */ int main() { int c; /* 注意是int而不是char,除了存储char类型字符,还要存储EO ...

  10. android导航设计

    http://www.geekpark.net/read/view/199244 Android 应用中十大导航设计错误 http://mobile.51cto.com/design-432944.h ...