“Count Primes” and "Range Sum Query - Immutable"
来源:互联网 发布:浙江移动网络运营岗位 编辑:程序博客网 时间:2024/05/19 11:50
Count Primes:
看了leetcode上的hint,大致明白了 Sieve of Eratosthenes方法。想用map存所有2到n的数,然而光把所有的数据扔到map中这样一个过程就超时了(囧,可能是insert太耗费时间了吧),而且map删除数据很麻烦,容易出错。官方给出的答案用了一个动态bool数组存储所有的数。还有一个重点是 Sieve of Eratosthenes方法中循环的条件,例如循环进行到5时,只需要从5*5开始标记就可以了,因为2*5,3*5,4*5在之前的循环中都标记过了,同理,5*6=5*2*3也标记过了,这样的话只需要检查5^2,5^2+5,5^2+5*2.....就足够了。最后附上官方的答案:
class Solution {public:int countPrimes(int n) {bool *isPrime = new bool[n];for (int i = 2; i < n; i++) {isPrime[i] = true;}// Loop's ending condition is i * i < n instead of i < sqrt(n)// to avoid repeatedly calling an expensive function sqrt().for (int i = 2; i * i < n; i++) {if (!isPrime[i]) continue;for (int j = i * i; j < n; j += i) {isPrime[j] = false;}}int count = 0;for (int i = 2; i < n; i++) {if (isPrime[i]) count++;}delete[] isPrime;return count;}bool isPrime(int num){if (num <= 1) return false;// Loop's ending condition is i * i <= num instead of i <= sqrt(num)// to avoid repeatedly calling an expensive function sqrt().for (int i = 2; i * i <= num; i++) {if (num % i == 0) return false;}return true;}};
Range Sum Query - Immutable:
最简单的方法就是一个个加,但是正如题里说的那样,这样的话加法函数被多次重复调用,所以可以把前n个数的和存在一个vector的第n位,这样求两个位置之间所有数的和的时候,直接在vector中找到对应位置的数据,做一次相减就完成了,感觉思路上有些像查表,能节省重复的加法运算。也学到了新的循环书写方式for (auto n : nums)来遍历数据集合。
class NumArray {public:vector<int> vectmp;NumArray(vector<int> &nums) {vectmp.push_back(0);for (auto n : nums) {vectmp.push_back(vectmp.back() + n);}}int sumRange(int i, int j) {return vectmp[j + 1] - vectmp[i];;}};
0 0
- “Count Primes” and "Range Sum Query - Immutable"
- Range Sum Query - Immutable
- Range Sum Query - Immutable
- Range Sum Query - Immutable
- Range Sum Query - Immutable
- Range Sum Query - Immutable
- Range Sum Query - Immutable
- Range Sum Query - Immutable
- Range Sum Query - Immutable
- Range Sum Query - Immutable
- Range Sum Query - Immutable
- Range Sum Query - Immutable
- Range Sum Query - Immutable
- Range Sum Query - Immutable
- Range Sum Query - Immutable
- Range Sum Query - Immutable
- Range Sum Query - Immutable
- Range Sum Query - Immutable
- JavaWeb伪静态
- 性能分析框架和性能监控平台
- selector和shape混合使用 开发技巧(一)
- Linux下NFS、FTP使用讲解
- solr基本操作代码示例
- “Count Primes” and "Range Sum Query - Immutable"
- C++面向对象的程序设计——继承
- Eclipse下安装GEF和AmaterasUML
- 解读 AFNetwork 3.x源码 与 AFNetwork 2.x
- JS中showModalDialog 详细使用
- 1、java_web概述
- ubuntu MRPT install
- C# WidowsForm 中Timer定时器的简单使用
- C++ 总结