合并有序链表,实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。
来源:互联网 发布:简述js的事件委托 编辑:程序博客网 时间:2024/06/08 13:21
合并有序链表,合并后仍然有序
这里我们采用递归实现,合并分升序和降序两种:
升序
//升序Node* Merge1(Node* pHead1, Node* pHead2) //链表合并{ if (pHead1 == NULL) { return pHead2; } else if (pHead2 == NULL) { return pHead1; } Node* MergeHead = NULL; if (pHead1->_data < pHead2->_data) { MergeHead = pHead1; MergeHead->_next = Merge1(pHead1->_next, pHead2); } else { MergeHead = pHead2; MergeHead->_next = Merge1(pHead1, pHead2->_next); } return MergeHead;}
降序
//降序Node* Merge2(Node* pHead1, Node* pHead2) //链表合并{ if (pHead1 == NULL) { return pHead2; } else if (pHead2 == NULL) { return pHead1; } Node* MergeHead = NULL; if (pHead1->_data > pHead2->_data) { MergeHead = pHead1; MergeHead->_next = Merge2(pHead1->_next, pHead2); } else { MergeHead = pHead2; MergeHead->_next = Merge2(pHead1, pHead2->_next); } return MergeHead;}
–实现1+2+3…+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。
一、使用递归
//使用递归#include <iostream>using namespace std;int GetRes(int n){ n && (n += GetRes(n - 1)); return n;}
二、使用构造函数
//使用构造函数class Sum{public: Sum() { ++N; res += N; } static int res; static int N; static int Get() { return res; } ~Sum() {}};int Sum::res = 0;int Sum::N = 0;int main(){ Sum* p = new Sum[10]; int Sum = Sum::Get()<<endl; delete [] p; a = NULL; printf("%d",Sum); }
三、利用函数指针
#include <iostream> using namespace std; typedef int (*fun)(int); int fun1(int num) { return 0; } int fun2(int num) { fun f[2] = {fun1,fun2}; return num + f[!!num](num-1); } int main() { int n = 0; cout<>n; printf("1+2+...+%d = %dn",n,fun2(n)); return 0; }
四、利用虚函数
#include <iostream> using namespace std; class A; A* Array[2]; class A { public: virtual int Sum(int n) { return 0; } }; class B:public A { public: virtual int Sum(int n) { return Array[!!n]->Sum(n-1)+n; } }; int Sum(int n) { A a; B b; Array[0]=&a; Array[1]=&b; int value=Array[1]->Sum(n); return value; } int main() { int n = 0; cout<>n; cout<<"1+2+...+"<<n<<" = "<<Sum(n)<<endl; return 0; }
五、利用模板和关键字inline
#include <iostream> using namespace std; template inline int Sum(int m) { return Sum(m-1)+m; } template inline int Sum(int m) { return 1; } template inline int Sum(int m) { return 0; } int main() { int sum = Sum(100); cout<<sum<<endl; return 0; }
时间复杂度总结:
解法1:利用递归(&&的短路特性)—-O(n)
解法2:利用构造函数和静态数据成员—-O(1)
解法3:利用函数指针—-O(n)
解法4:利用虚函数—-O(n)
解法5:利用模板和关键字inline—-O(n)
阅读全文
0 0
- 合并有序链表,实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。
- 剑指offer 46---实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字
- 算法--实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。(详细讲解)
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字(for、while、if、else、switch、case)。
- 计算1+2+3……+n要求不能使用乘除法,循环,条件判断,选择相关的关键字
- day01之合并两个有序链表+实现1+2+3...+n要求不能使用乘除法循环条件判断等
- 合并链表和求1+2+...+n不用循环、乘除法、循环、条件判断、选择相关的关键字
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断
- 实现1+2+3...+n,不能使用*、/、循环、条件判断、选择相关的关键字
- 实现1+2+3...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
- 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。Java实现
- 实现1+2+3+...+n。要求不能使用乘除法,for,while,if,else,switch,case,等关键字及条件判断语句。
- 算法系列——Binary Tree Preorder Traversal
- 利用安卓SQLite修改QQ运动步数方法分享 简单粗暴
- Android开发神器总结
- DB2中在诊断日志db2diag.log中出现某些字符串时,自动抓取您想要的数据
- 常见排序算法整理(一)----冒泡排序、直接插入排序
- 合并有序链表,实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。
- 镜头畸变现象及其校正方法
- html总结
- 自定义Toast工具类
- DataGridView列自适应宽度
- python06字典
- hive基本操作
- spring整合应用安全框架Shiro
- 算法系列——Binary Tree Inorder Traversal