zoukankan      html  css  js  c++  java
  • 2017-3-11 leetcode 217 219 228

    ji那天好像是周六。。。。。吃完饭意识到貌似今天要有比赛(有题解当然要做啦),跑回寝室发现周日才开始233333

    ======================================================================

    leetcode217 Contains Duplicate

    leetcode219 Contains Duplicate II

    leetcode228 Summary Ranges

    =======================================================================

    217讲的是
    给你n个数字,判断下是否有重复的数据出现。

    我的思路
    丢到unordered_map里检查下就行。。。

     1 class Solution {
     2 public:
     3     bool containsDuplicate(vector<int>& nums) {
     4         int n=nums.size();
     5         unordered_map<int,int> m;
     6         for(int i=0;i<n;i++){
     7             if(m.find(nums[i])==m.end()){
     8                 m[nums[i]]=1;
     9             }else return true;
    10         }
    11         return false;
    12     }
    13 };
    217

    讨论版里没有什么新奇的思路。。。

    =======================================================================

    219讲的是
    给你n个数字和一个数字k,判断下是否有重复的数据出现在任意长度为k的区间内。
    也就是说如果有任意ij满足nums[i]==nums[j]&&abs(i-j)<=k则返回真

    我的思路
    丢到unordered_map里检查下就行。。。距离小于i-k的erase掉就好。。。

     1 class Solution {
     2 public:
     3     bool containsNearbyDuplicate(vector<int>& nums, int k) {
     4         int n=nums.size();
     5         unordered_map<int,int> m;
     6         for(int i=0;i<min(n,k+1);i++){
     7             if(m.find(nums[i])==m.end()){
     8                 m[nums[i]]=1;
     9             }else return true;
    10         }
    11         for(int i=min(n,k+1);i<n;i++){
    12             m.erase(nums[i-k-1]);
    13             if(m.find(nums[i])==m.end()){
    14                 m[nums[i]]=1;
    15             }else return true;
    16         }
    17         return false;
    18     }
    19 };
    219

    恩,其实这种判断元素存在性的题目,用set会更好些。

    ========================================================================

    228讲的是
    给你n个数字(有序,无重),把点转化为区间。
    比如输入[0,1,2,4,5,7],输出["0->2","4->5","7"](字符串数组)

    我的思路
    线性的扫就好了。。。O(n)啊。。。不知道为什么难度被定义为中等。。

     1 class Solution {
     2 public:
     3     vector<string> summaryRanges(vector<int>& nums) {
     4         int n=nums.size();
     5         vector<string> aim;
     6         if(!n)return aim;
     7         int s=nums[0],t=nums[0];
     8         for(int i=1;i<n;i++){
     9             if(nums[i]!=nums[i-1]+1){
    10                 t=nums[i-1];
    11                 char temp[30];
    12                 if(s==t)
    13                     sprintf(temp,"%d",s);
    14                 else sprintf(temp,"%d->%d",s,t);
    15                 string s_temp(temp);
    16                 aim.push_back(s_temp);
    17                 s=nums[i];
    18             }
    19         }
    20         t=nums[n-1];
    21         char temp[30];
    22         if(s==t)
    23             sprintf(temp,"%d",s);
    24         else sprintf(temp,"%d->%d",s,t);
    25         string s_temp(temp);
    26         aim.push_back(s_temp);
    27         return aim;
    28     }
    29 };
    228

    我想使用to_string函数来着的,但是我的codeblocks一直报错。。。重装系统+VS当做官方IDE已经迫在眉睫了

  • 相关阅读:
    银行卡号每隔4位插入空格
    IE6-8下自定义标签的表现
    Sql Server尝试读取或写入受保护的内存。这通常指示其他内存已损坏
    儿童编程教学scratch 3.0
    Shell 教程入门
    自定义vs2005代码段
    解决Adobe ReaderXI自动关闭问题
    WPF——给button添加背景图片
    WPF 异步加载数据
    Caliburn.Micro中的WindowManager
  • 原文地址:https://www.cnblogs.com/xuwangzihao/p/6535021.html
Copyright © 2011-2022 走看看