当前位置: 首页 > news >正文

网站建设网站软件有哪些阿里云建站

网站建设网站软件有哪些,阿里云建站,潍坊网站开发高手,域名和空间的定义求 12…n &#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句&#xff08;A?B:C&#xff09;。 示例 1&#xff1a; 输入: n 3 输出: 6 限制&#xff1a; 1 < n < 10000 解法一&#xff1a;利用逻辑运算符的短路&#xf…

求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

示例 1:

输入: n = 3
输出: 6

限制:

1 <= n <= 10000

解法一:利用逻辑运算符的短路:

class Solution {
public:int sumNums(int n) {n && (n += sumNums(n - 1));return n;}
};

此算法时间复杂度为O(n),空间复杂度为O(n)。

解法二:利用虚函数求解:

class base;
vector<base *> arr;class base {
public:virtual int plus(int i) {return 0;}
};class derived : public base {
public:virtual int plus(int i) override {return i + arr[!!i]->plus(i - 1);}
};class Solution {
public:int sumNums(int n) {arr.push_back(new base());arr.push_back(new derived());return arr[!!n]->plus(n);}
};

此算法时间复杂度为O(n),空间复杂度为O(n)。

解法三:纯C环境下没有虚函数,可以使用函数指针代替:

vector<int (*)(int)> funcArr;int sum(int i) {return i + funcArr[!!(i - 1)](i - 1);
}int sumTerminator(int i) {return i;
}class Solution {
public:Solution() {funcArr.push_back(sumTerminator);funcArr.push_back(sum);}int sumNums(int n) {return funcArr[!!n](n);}
};

此算法时间复杂度为O(n),空间复杂度为O(n)。

解法四:利用static成员:

class Solution {
public:Solution() {sum += i;++i;}int sumNums(int n) {i = 1;sum = 0;vector<Solution *> temp;for (int i = 0; i < n; ++i) {temp.push_back(new Solution);}return sum;}static int i;static int sum;
};int Solution::i = 1;
int Solution::sum = 0;

此算法时间复杂度为O(n),空间复杂度为O(n)。

解法五:利用模板,在编译期计算出结果,但这种方式需要输入是constexpr的:

class Solution {
public:template<int N> struct ans {enum {sum = N + ans<N - 1>::sum};};template<> struct ans<1> {enum {sum = 1};};int sumNums() {return ans<5>::sum;    // 模板参数需要是constexpr的}
};

此算法时间复杂度为O(1),空间复杂度为O(1)。

解法六:将enum改为const static int,在较老的不支持类内const static的编译器上,常用enum代替const static,这种方法也需要模板参数是constexpr的:

class Solution {
public:template<int N> struct ans {const static int sum = N + ans<N-1>::sum;};template<> struct ans<1> {const static int sum = 1;};int sumNums() {return ans<3>::sum;}
};

此算法时间复杂度为O(1),空间复杂度为O(1)。

解法七:利用数组大小,根据求和公式sum = i(i+1)/2

class Solution {
public:int sumNums(int i) {bool arr[i][i+1];return sizeof(arr) >> 1;}
};

此算法时间复杂度为O(n),空间复杂度为O(n)。

解法八:对于相乘的两个数A和B,将B转换为二进制,如果B中的第i位为1,这位1对结果的贡献为A * (1 << i),这个方法也被称作俄罗斯农民乘法,经常被用于两数相乘取模的场景,如果两数相乘已经超过数据范围,但取模后不会超过,我们就可以利用这个方法来拆位取模计算贡献,保证每次运算都在数据范围内。将其应用到求和公式:

class Solution {
public:int sumNums(int i) {int a = i, b = i + 1;int ans = 0;while (b) {if (b & 1) {ans += a;}b >>= 1;a <<= 1;}return ans >> 1;}
};

但是题目要求不能使用while循环,由于题目要求中对输入有限制,n最大为10000,因此最多循环14次,我们把循环中内容写14次即可:

class Solution {
public:int sumNums(int i) {int a = i, b = i + 1;int ans = 0;(b & 1) && (ans += a);b >>= 1;a <<= 1;(b & 1) && (ans += a);b >>= 1;a <<= 1;(b & 1) && (ans += a);b >>= 1;a <<= 1;(b & 1) && (ans += a);b >>= 1;a <<= 1;(b & 1) && (ans += a);b >>= 1;a <<= 1;(b & 1) && (ans += a);b >>= 1;a <<= 1;(b & 1) && (ans += a);b >>= 1;a <<= 1;(b & 1) && (ans += a);b >>= 1;a <<= 1;(b & 1) && (ans += a);b >>= 1;a <<= 1;(b & 1) && (ans += a);b >>= 1;a <<= 1;(b & 1) && (ans += a);b >>= 1;a <<= 1;(b & 1) && (ans += a);b >>= 1;a <<= 1;(b & 1) && (ans += a);b >>= 1;a <<= 1;(b & 1) && (ans += a);b >>= 1;a <<= 1;return ans >> 1;}
};

此算法时间复杂度为O(lgn),空间复杂度为O(1)。

http://www.khdw.cn/news/54411.html

相关文章:

  • dw网页设计怎么插图片关键词优化seo公司
  • 空间里怎么放多个网站长沙seo技术培训
  • 网站目录权限设置口碑营销案例及分析
  • wordpress边栏添加标签云南京seo收费
  • 企业门户网站需求分析优化落实新十条措施
  • 自学网站建设快吗新闻头条最新消息国家大事
  • 科技公司网站设计公司厦门百度关键词推广
  • 做传销网站违法吗品牌推广方案范文
  • 怎么查域名服务商免费seo关键词优化方案
  • 制作公司网站公司网络营销百科
  • 变更股东怎样在工商网站做公示品牌营销策略分析
  • wordpress三级分销主题简述seo的应用范围
  • 做电影网站服务器需求收录网
  • 做网站公司怎么样竞价排名规则
  • 远程医疗型网站开发百度霸屏推广一般多少钱
  • 怎么给自己的网站做模版惠州疫情最新消息
  • 2017淘宝客网站怎么做进入百度一下官网
  • 合肥长丰路网站建设关键词自动生成器
  • wordpress+电脑测试搜索引擎seo优化平台
  • 西安进一步优化近期防疫措施seo关键词排名优化方法
  • 网站文字怎么做超链接谈谈你对seo概念的理解
  • 中国做网站公司排名广东最新疫情
  • 网站基础上添加建设方案模板关键字广告
  • 网站建设设计总结武汉网络推广seo
  • 优秀设计案例网站seo优化案例
  • 济南科技市场做网站南宁市优化网站公司
  • 门诊部网站建设百度公司在哪里
  • 微商网站制作百度云搜索引擎入口手机版
  • 做购物网站是怎么连接银行长沙百度网站排名优化
  • 网站专题策划方案书怎样设计一个网页