LeeCode题目总结(1)

Contain 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.

代码:

 1 public class Solution {
 2     public boolean containsNearbyDuplicate(int[] nums, int k) {
 3         boolean tag = false; // 设置标志位
 4         Map<Integer, Integer> map = new HashMap<Integer, Integer>();
 5
 6         if (nums.length <2 || k == 0) {
 7             return tag;
 8         }
 9         for (int i = 0; i < nums.length; i++) {
10
11             // 如果在map中找到num[i],那么开始判断
12             if (map.containsKey(nums[i])) {
13                 int index = map.get(nums[i]);
14                 if ((i-index) <= k) {
15                     tag = true;
16                 }
17             }
18             // 如果在map中找不到,那么就将该值放入map之中
19             map.put(nums[i], i);
20         }
21         return tag;
22     }
23 }

我做看到这道题目的时候,第一反应就是使用两个for循环,一个用于遍历数组并将数组中的元素保存在一个变量中,另一个数组用于将数组中的其他元素分别和第一个for中的变量进行比较,但按照这个思路编写好的程序执行效率特别低。提交代码的时候,就报了time limited错误。

所以可以使用map集合进行数据的存储,但关键是map<key,value>中都保存那些内容,在该题中一反常态,将数组中的值保存在key中,将数组的下标保存在value中。当数组中出现重复的元素时,外部循环中的i代表了该重复元素在数组中的位置,map.get(num[i])表示该元素第一次出现在map中的位置,这样问题就解决了。

时间: 2024-11-05 13:40:20

LeeCode题目总结(1)的相关文章

好像leeceode题目我的博客太长了,需要重新建立一个. leecode刷题第二个

376. Wiggle Subsequence               自己没想出来,看了别人的分析. 主要是要分析出升序降序只跟临近的2个决定.虽然直觉上不是这样. 455. 分发饼干                           非常重要的一个题目,主要是要通过这个题目来彻底理解for 循环里面动态变化时候会发生的bug问题.问题本身是trivaial的. class Solution: def findContentChildren(self, g, s): ""&qu

leecode 归并排序 链表(java)

写了好久,终于写成了.第一次zai leecode错题,题目质量很高,适合面试,与 1.归并排序是稳定的,在java中 Arrays.sort(a);中对于对象的排序就是归并排序.对于原子类型数据使用的是快排. 2.算法复杂度,我们都知道归并排序的最好最坏最差复杂度为nlogn,空间复杂度为n,在链表当中,空间复杂度j降为O(1). 3.写链表的排序 1.分: 使用书上的快慢指针来获得中间节点,分割成2个链表 2.和: 将两个链表合成一个,比较简单 3. 主程序 ListNode lmerge(

leecode练习--804、唯一摩尔斯密码词

leecode练习--804.唯一摩尔斯密码词 题目要求: 国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串 比如: "a" 对应 ".-", "b" 对应 "-...", "c" 对应 "-.-.", 等等 为了方便,所有26个英文字母对应摩尔斯密码表如下: [".-","-...","-.-.&qu

leecode练习--292、Nim游戏

leecode练习--292.Nim游戏 题目要求: 你和你的朋友,两个人一起玩 "Nim 游戏",桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者.你作为先手 你们是聪明人,每一步都是最优解. 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏 示例: 输入: 4 输出: false 解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛: 因为无论你拿走 1 块.2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走. 解题思路

LeeCode刷题记录

在博客园上开启LeeCode刷题记录,希望可以成为一只厉害的程序媛~ 类别:Python 题目(1) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例:给定 nums = [2, 7, 11, 15]      target = 9    因为 nums[0] + nums[1] = 2 + 7 = 9      所以返回 [0, 1]

四则运算题目生成程序

a.需求分析 看了大家对于本课程的目标和规划,很多同学都希望能提高自己的实践能力,没有捷径可走,就是练习.练习再练习!那么就从第一个个人项目开始吧,用一周的时间完成一个基于控制台的四则运算程序,实现一个自动生成小学四则运算题目的命令行程序 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 =

四则运算题目生成程序(基于控制台)

题目描述: 能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24 运算符为 +, ?, ×, ÷ 并且要求能处理用户的输入,并判断对错,打分统计正确率 要求能处理用户输入的真分数, 如 1/2, 5/12 等 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目 功能设计: 1.  通过随机数的生成,实现+, ?, ×, ÷的确定 2.  +, ?, ×, ÷分别赋予整

记一次坑die(误)的题目--HDU2553--(DFS)

,N皇后问题   Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 720 Accepted Submission(s): 417 Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上.你的任务是,对于给定的N,求出有多少种合

九度oj 题目1552:座位问题

题目描述: 计算机学院的男生和女生共n个人要坐成一排玩游戏,因为计算机的女生都非常害羞,男生又很主动,所以活动的组织者要求在任何时候,一个女生的左边或者右边至少有一个女生,即每个女生均不会只与男生相邻.现在活动的组织者想知道,共有多少种可选的座位方案. 例如当n为4时,共有 女女女女, 女女女男, 男女女女, 女女男男, 男女女男, 男男女女, 男男男男7种. 输入: 输入包含多组测试用例,每组测试用例仅包含一个整数n(1<=n<=1000). 输出: 对于每组测试用例,输出一个数代表可选的方