LeetCode 2015.10.6 287,41,154,117,128,33,81,72,138,133,164

LeetCode 2015.10.6 287,41,154,117,128,33,81,72,138,133,164

287 Find the Duplicate Number
法一:

class Solution {
public:
    int findDuplicate(vector<int>& nums) {
        int len =nums.size();
        int n=len-1;
        if (len==0) return 0;
        int cnt;
        for(int i=1;i<=n;i++)
        {
            cnt=0;
            for(int j=0;j<len;j++)
                if (i==nums[j])
                {
                    cnt++;
                    if (cnt>1) return nums[j];
                }
        }
        return 0;
    }
};

法二:
class Solution {
public:
    int findDuplicate(vector<int>& nums) {
        int len=nums.size();
        int left=0,right=len-1,mid=0;
        while (left<right)
        {
            mid=(right-left)/2+left;
            int cnt=countLess(mid,len,nums);
            if (cnt<=mid) left=mid+1;
            else right=mid;
        }
        return left;
    }

    int countLess(int mid,int len,vector<int> nums)
    {
        int cnt=0;
        for(int i=0;i<len;i++)
            if (nums[i]<=mid)
            cnt++;
        return cnt;
    }
};


41 First Missing Positive
class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int len=nums.size();
        if (len==0) return 1;
        for(int i=0;i<len;i++)
        {
            if (nums[i]>=len) continue;
            if (nums[i]>0 && nums[i]!=i+1)
            {
                int index=i;
                while ((nums[index]>0) && (nums[nums[index]-1]!=nums[index]))
                {
                    int index2=nums[index]-1;
                    int tmp=nums[index];
                    nums[index]=nums[index2];
                    nums[index2]=tmp;
                }
            }
        }
        for(int i=0;i<len;i++)
            if (nums[i]!=i+1) return i+1;
        return nums[len-1]+1;
    }
};

154 Find Minimum in Roated Sorted Array II
class Solution {
public:
    int findMin(vector<int>& nums) {
        int len=nums.size();
        int index=0;
        for(int i=1;i<len;i++)
        {
            if(nums[i]!=nums[i-1])
            {
                index++;
                nums[index]=nums[i];
            }
        }
        int left=0,right=index;
        while (left<=right)
        {
            if (left==right) return nums[left];
            if (left+1==right) return min(nums[left],nums[right]);
            int mid=(left+right)/2;
            if (nums[mid]<nums[left] && nums[mid]<nums[right])
                right=mid;
            else
            {
                if (nums[left]<nums[right])
                    right=mid-1;
                else
                    left=mid+1;
            }
        }
        return 0;
    }
};

117 Poplulating Next Right Pointers in Each Node II
class Solution {
public:
    void connect(TreeLinkNode *root) {
        if (root==NULL) return ;
        queue<TreeLinkNode*> q[2];
        queue<int>qindex;
        int now=0;
        q[now].push(root);
        TreeLinkNode* tmpnode(0);
        while (!q[now].empty())
        {
            while (!q[now].empty())
            {
                tmpnode=q[now].front();
                q[now].pop();
                if (tmpnode->left!=NULL) q[1-now].push(tmpnode->left);
                if (tmpnode->right!=NULL) q[1-now].push(tmpnode->right);
                if (!q[now].empty())
                    tmpnode->next=q[now].front();
            }
            now=1-now;
        }
    }
};

128 Longest Consecutive Sequence
class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        map<int,bool> flag;
        int len=nums.size();
        if (len==0) return 0;
        map<int,bool>::iterator it;
        int ans=-INT_MAX;
        int segLen=0;
        for(int i=0;i<len;i++)
        {
            it=flag.find(nums[i]);
            if (it==flag.end())
                flag[nums[i]]=true;
        }
        int last=flag.begin()->first - 1;
        for(it=flag.begin();it!=flag.end();it++)
        {
            if (segLen>ans) ans=segLen;
            int now=it->first;
            if (now==last+1) segLen++;
            else segLen=1;
            last=now;
        }
        if (segLen>ans) ans=segLen;
        return ans;
    }
};

33 Search in Rotated Sorted Array
class Solution {
public:
    int search(vector<int>& nums, int target) {
        map<int,int> flag;
        int len=nums.size();
        for(int i=0;i<len;i++)
            flag[nums[i]]=i;
        map<int,int>::iterator it;
        it=flag.find(target);
        if (it!=flag.end()) return it->second;
        else return -1;
    }
};

81 Search in Rotated Sorted Array II
class Solution {
public:
    bool search(vector<int>& nums, int target) {
        map<int,int> flag;
        map<int,int>::iterator it;
        int len=nums.size();
        for(int i=0;i<len;i++)
        {
            it=flag.find(nums[i]);
            if (it==flag.end())
                flag[nums[i]]=i;
        }
        it=flag.find(target);
        if (it!=flag.end()) return true;
        else return false;
    }
};

72 Edit Distance
class Solution {
public:
    int minDistance(string word1, string word2) {
        int len1=word1.size(),len2=word2.size();
        int f[len1+5][len2+5];
        for(int j=0;j<=len2;j++) f[0][j]=j;
        for(int i=0;i<=len1;i++) f[i][0]=i;
        f[0][0]=0;
        for(int ix=0;ix<len1;ix++)
            for(int jx=0;jx<len2;jx++)
            {
                int i=ix+1,j=jx+1;
                f[i][j]=min(f[i-1][j],f[i][j-1])+1;
                if (word1[ix]==word2[jx])
                    f[i][j]=min(f[i][j],f[i-1][j-1]);
                    else f[i][j]=min(f[i][j],f[i-1][j-1]+1);
            }
        return f[len1][len2];
    }
};

138 Copy List with Random Pointer
class Solution {
    map<RandomListNode*,RandomListNode*> flag;
    map<RandomListNode*,RandomListNode*>::iterator it;
public:
    RandomListNode *copyRandomList(RandomListNode *head) {
        if (head==NULL) return NULL;
        it=flag.find(head);
        if (it==flag.end())
        {
            RandomListNode* newNode = new RandomListNode(0);
            flag[head]=newNode;
            newNode->label=head->label;
            if (head->next!=NULL)
                newNode->next=copyRandomList(head->next);
            if (head->random!=NULL)
                newNode->random=copyRandomList(head->random);
            return newNode;
        }
        else return flag[head];
    }
};

133 Clone Graph
class Solution {
    map<UndirectedGraphNode*,UndirectedGraphNode*> flag;
    map<UndirectedGraphNode*,UndirectedGraphNode*>::iterator it;
public:
    UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
        if (node==NULL) return NULL;
        it=flag.find(node);
        if (it!=flag.end()) return flag[node];
        UndirectedGraphNode* newNode= new UndirectedGraphNode(node->label);
        flag[node]=newNode;
        int nlen=node->neighbors.size();
        if (nlen!=0)
        {
            for(int i=0;i<nlen;i++)
            {
                newNode->neighbors.push_back(cloneGraph(node->neighbors[i]));
            }
        }
        return newNode;
    }
};

164 Maximum Gap
class Solution {
    map<int,bool> flag;
    map<int,bool>::iterator it;
public:
    int maximumGap(vector<int>& nums) {
        int len=nums.size();
        if (len<2) return 0;
        int ans=-INT_MAX;
        for(int i=0;i<len;i++)
        {
            it=flag.find(nums[i]);
            if (it==flag.end())
                flag[nums[i]]=true;
        }
        map<int,bool>::iterator last=flag.begin();
        it=flag.begin();it++;
        for(;it!=flag.end();it++)
        {
            int tmp =(it->first)-(last->first);
            if (tmp>ans) ans=tmp;
            last=it;
        }
        if (flag.size()==1) return 0;
        return ans;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值