First Missing Positive & Clone Graph & Sqrt(x)

来源:互联网 发布:网络调查问卷设计 编辑:程序博客网 时间:2024/06/01 04:00

(1) First Missing Positive

根据[1]: 贪心的策略,O(n)的循环把数字放到其对应的位置,即满足A[i]=i+1,就能保证每次交换就是有意义的。如果当前位置已经存在正确的值,就不交换,否则会死循环。最后在扫描一遍,如果当前位置上数字不对就输出,如果都正确,就没有漏的数字,输出n+1。

class Solution {public:    int firstMissingPositive(int A[], int n) {                for(int i=0;i<n;i++)            while(A[i]!=i+1 && A[i]>=1 && A[i]<=n && A[A[i]-1]!=A[i])                swap(A[i],A[A[i]-1]);                        for(int i=0;i<n;i++)            if(A[i]!=(i+1))                return i+1;                return n+1;    }};

(2) Clone Graph

深度遍历,注意防止回路无限循环,就要使用hash表,这里使用unordered_map记录访问过的节点。因为这里的label应该是唯一的才对,所以可以直接使用label作为关键字就可以[2]。

class Solution {private:    UndirectedGraphNode *dfs(UndirectedGraphNode *node, unordered_map<int, UndirectedGraphNode*> &htable){        if(!node)            return node;        if(htable.count(node->label))            return htable[node->label];                UndirectedGraphNode* ret=new UndirectedGraphNode(node->label);        htable[node->label]=ret;        if(node->neighbors.size())            for(int i=0;i<node->neighbors.size();i++)                (ret->neighbors).push_back(dfs((node->neighbors)[i],htable));        return ret;    }public:    UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {                unordered_map<int, UndirectedGraphNode*> htable;        return dfs(node,htable);    }};

(3) Sqrt(x) 

对于一个非负数n,它的平方根不会小于大于(n/2+1)。在[0, n/2+1]这个范围内可以进行二分搜索,求出n的平方根[3]。

class Solution {public:    int sqrt(int x) {        long long range=x/2+1;        long long begin=0;        long long end=range;                while(begin<=end)        {            long long mid=(begin+end)/2;            long long tmp=mid*mid;            if(tmp>x)                end=mid-1;            else if(tmp<x)                begin=mid+1;            else                return mid;        }        return end;    }};

还有一种方法用牛顿迭代[3]。


参考:

[1] http://blog.csdn.net/havenoidea/article/details/11812717

[2] https://oj.leetcode.com/problems/clone-graph/
[3] http://www.cnblogs.com/AnnieKim/archive/2013/04/18/3028607.html

0 0
原创粉丝点击