剑指Offer
Michael.Scofield
C++程序猿
展开
-
剑指Offer题9:斐波那契数列
0 1 1 2 3 5 8 13 class Solution { public: int fib(int n) { long long f0 = 0; long long f1 = 1; long long f = 0; if(n == 0) return f0; else if(n == 1) return f1; for(i.原创 2021-06-14 19:36:15 · 59 阅读 · 0 评论 -
剑指Offer题8:二分查找
class Solution8 { public: int minArray(vector<int>& numbers) { int n = numbers.size(); int indexleft = 0; int indexright = n-1; int indexmid = indexleft; if(n == 1) return nu.原创 2021-06-14 18:02:27 · 53 阅读 · 0 评论 -
剑指Offer题7:栈和队列
template <typename T> class CQueue { public: CQueue() {} ~CQueue(){} void appendTail(const T& node); T deleteHead(); private: stack<T>stack1; stack<T>stack2; }; template<typename T> void CQueue<T&.原创 2021-06-14 16:31:39 · 58 阅读 · 0 评论 -
剑指Offer题41:数据流的中位数:堆排序
剑指 Offer 41. 数据流中的中位数 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个支持以下两种操作的数据结构: void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMedian() - 返回目前所有元原创 2021-06-11 09:38:26 · 136 阅读 · 0 评论 -
剑指Offer题40:最小的k个数:快速排序,优先队列
输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。 示例 1: 输入:arr = [3,2,1], k = 2 输出:[1,2] 或者 [2,1] 示例 2: 输入:arr = [0,1,2,1], k = 1 输出:[0] 1.优先队列,队列中先输入前k个元素,然后将剩余元素与队顶元素比较,小于队顶元素则弹出队顶元素并将当前元素进队,否则不进队。 2.快速排序:以下标返回值是否为k-1为判断依据,当返回值等于k-1则下表原创 2021-06-09 10:00:26 · 140 阅读 · 0 评论 -
剑指Offer题6:重建二叉树
struct BinaryTreeNode { int m_nValue; BinaryTreeNode * m_pLeft; BinaryTreeNode * m_pRight; }; void PrePrintTree(BinaryTreeNode *p) { if (p != NULL) { cout << p->m_nValue << "" << endl; PrePrintTree.原创 2021-06-01 21:52:24 · 55 阅读 · 0 评论 -
剑指Offer题5:从尾到头打印链表
方法1.顺序遍历链表,将链表中的结点存入栈中,然后遍历栈取出结点并打印结点中的元素。 方法2.顺序遍历链表,将链表中的元素存入栈中,然后遍历栈取出元素。 方法3.采用递归,每次访问到某个结点,先递归它后面的结点,再输出自身。 节点结构体 struct ListNode { int m_nKey; ListNode *m_pNext; }; 创建链表函数 void CreateLink(ListNode *head) { int key; cout<<"if K.原创 2021-05-29 16:11:03 · 55 阅读 · 0 评论 -
剑指Offer题4:替换空格
方法1:新建一个字符串来将原字符串复制过来,并且碰到空格就填入%20 string Offer4_1(string ch,int length) { string ch1=""; int j = 0; if(ch!= ""&&length>0) { for(int i = 0;i<length;i++) { if(ch[i] !=' ') { .原创 2021-05-26 20:33:07 · 67 阅读 · 0 评论 -
字符串的初始化问题
当几个指针使用相同的常量字符串初始化时,这些指针会指向相同的地址。(指向常量地址) 当几个字符串数组使用相同的常量字符串初始化时,这些数组指向不同的地址。(复制) void strTest() { char str1[] = "Hello World"; char str2[] = "Hello World"; char* str3 = "Hello World"; char* str4 = "Hello World"; if(str1 == str2) cou原创 2021-05-25 20:21:41 · 194 阅读 · 0 评论 -
剑指Offer题1:赋值运算符函数
class CMyStringPrim { public: CMyStringPrim(char * pData = NULL) { if(pData == nullptr) { m_pData = new char[1]; m_pData[0] = '\0'; } else { this->m_pData =原创 2021-05-25 16:48:53 · 56 阅读 · 0 评论 -
剑指Offer题2:二维顺序数组查找指定元素
查找按照从左上角开始,碰到比被查找元素大的元素行不变,列向右变化一个,遇到比自己小的元素列不变,行向下变化一个,遇到与被查找元素相同的则返回true,行的索引大于最大值或列的索引变为负值则返回false。 二维数组的传参方式。 bool Offer3_1(int data[][4],int length,int input) { int len =sqrt(length); int temp ; if(data!=NULL&&length>0&&.原创 2021-05-25 20:07:39 · 68 阅读 · 0 评论