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
- First Missing Positive & Clone Graph & Sqrt(x)
- LeetCode: First Missing Positive
- LeetCode First Missing Positive
- LeetCode: First Missing Positive
- [Leetcode] First Missing Positive
- leetcode12: First Missing Positive
- First Missing Positive
- [LeetCode] First Missing Positive
- [Leetcode] First Missing Positive
- leetcode First Missing Positive
- LeetCode First Missing Positive
- [leetcode] first missing positive
- First Missing Positive
- LeetCode: First Missing Positive
- First Missing Positive
- First Missing Positive
- [LeetCode]First Missing Positive
- First Missing Positive
- HDU 4501 三重背包
- Android 关于Dialog弹出框
- poj 1416 Shredding Company
- ZOJ-1121
- 数据结构简单的停车管理系统
- First Missing Positive & Clone Graph & Sqrt(x)
- POJ 2492 A Bug's Life
- 体积雾(dx9)
- ViewGroup的onMeasure和onLayout分析
- 关于UEFI
- Android多线程分析之五:使用AsyncTask异步下载图像
- elasticsearch的一些基本概念
- 计算机视觉国外研究机构及大牛
- OCP 1Z0 053 169