zoukankan      html  css  js  c++  java
  • LeetCode【217. 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.

    思路1.

    对每一个数字都与其后序的数字进行比较,如果相同则返回true,如果不同,则指导遍历完最后一个数字返回false,时间复杂度为(n-1)+(n-2)+....2+1,所以是O(n2),代码就不写了,这方法不好。

    思路2.

    先排序,然后在遍历vector,如果有相邻的值相同,则返回true,负责将pivot设置为当前的值。总的时间复杂度为排序O(nlogn)+遍历O(n)

    class Solution {
    public:
        bool containsDuplicate(vector<int>& nums) {
             bool flag = false;
             int len = nums.size();
             if(len > 1)
             {
                sort(nums.begin(),nums.end());
                int MarkNum = nums[0];
                for(int i = 1; i<= len; i++)
                {
                    if(nums[i] == MarkNum)
                        flag = true;
                    else
                        MarkNum=nums[i];
                }
             }
             else
              flag = false;
        return flag;
        }
    };
    

      

    思路3,利用额外空间,unordered_map,如果元素不存在,计数器的值加1,如果存在,则返回true

    class Solution {
    public:
        bool containsDuplicate(vector<int>& nums) {
            unordered_map<int,int> cmpMap;
            for( int i = 0; i < nums.size(); i++ ){
                if( cmpMap.find(nums[i]) == cmpMap.end() ){
                    cmpMap[nums[i]]++;
                }
                else{
                    return true;
                }
            }
            return false;
        }
    };
    

    思路3我本来以为时间复杂度应该在O(n)但提交以后,速度还没思路2的快,不知道是什么原因。

  • 相关阅读:
    linux [Fedora] 下的 "飞秋/飞鸽传书"
    弹跳是不是自由落体?
    插件的简单原理
    WebService的简单应用
    普通按钮的另一种提交方式(调用后台事件)
    ASPNET服务端控件练习(一个机试题)
    AJAX简单的数据增删改与分页应用
    new XMLHttpRequest()和页面关系
    c++中placement new
    netty的引用计数
  • 原文地址:https://www.cnblogs.com/rockwall/p/5744246.html
Copyright © 2011-2022 走看看