前言:继续分享,加油!

  面试题44:

  

  代码如下:

#include<iostream>
#include<stdlib.h>
using namespace std; int compare(const void *arg1,const void *arg2)
{
return *(int *)arg1 - *(int *)arg2;
} bool IsContinuous(int *numbers,int len)
{
if(numbers==NULL || len<)
return false; qsort(numbers,len,sizeof(int),compare); int numberOfZero = ;
int numberOfGap = ; //统计数组中的间隔数目
int small = numberOfZero;
int big = small+;
while(big < len)
{
//两个数相等,有对子,不可能是顺子
if(numbers[small] == numbers[big])
return false; numberOfGap += numbers[big]-numbers[small]-;
small = big;
++big;
} return (numberOfGap>numberOfZero)?false:true;
} int main()
{
int data[]={,,,,};
cout << boolalpha << IsContinuous(data,) << endl; return ;
}

  面试题45:

  

  代码如下:

  

#include<iostream>
#include<list>
using namespace std; int LastRemaining(unsigned int n,unsigned int m)
{
if(n< || m<)
return -; unsigned int i=; //创建双向链表
list<int> numbers;
for(i=;i<n;++i)
numbers.push_back(i);
//使用迭代器
list<int>::iterator current = numbers.begin();
while(numbers.size() > )
{
//找到m位置
for(int i=;i<m;++i)
{
current++;
//将表尾指向表头
if(current == numbers.end())
current = numbers.begin();
}
list<int>::iterator next = ++current;
if(next == numbers.end())
next = numbers.begin(); --current;
//删除节点
numbers.erase(current);
current = next;
}
return *(current);
} int main()
{
cout << "data: " << LastRemaining(,) << endl; return ;
}

  面试题46:

  

  这道题用是三种方法给大家演示:

  方法一:构造函数

  

/* 解法一:利用构造函数 */

#include<iostream>
using namespace std; class Temp{
private:
static unsigned int N;
static unsigned int Sum;
public:
//构造函数
Temp(){++N;Sum+=N;};
static void Reset(){N=;Sum=;}
static unsigned int GetSum(){return Sum;}
}; unsigned int Temp::N = ;
unsigned int Temp::Sum = ; unsigned int Sum_Solution(unsigned int n)
{
Temp::Reset(); //会调用n次
Temp *a = new Temp[n];
delete []a;
a=NULL; return Temp::GetSum();
} int main()
{
cout << "sum: " << Sum_Solution() << endl;; return ;
}

  方法二:虚函数

  

/* 解法二 用虚函数  */

#include<iostream>
using namespace std; class A;
A*Array[]; class A{
public:
virtual unsigned int Sum(unsigned int n)
{
return ;
}
}; class B:public A
{
public:
virtual unsigned int Sum(unsigned int n)
{
//两次取反,非0的n转换为true
return Array[!!n]->Sum(n-) + n;
}
}; int Sum_Solution(int n){
A a;
B b;
Array[] = &a;
Array[] = &b; int value = Array[]->Sum(n); return value;
} int main()
{
cout << "sum: " << Sum_Solution() << endl; return ;
}

  方法三:利用函数指针

  

/* 利用函数指针 */

#include<iostream>
using namespace std; typedef unsigned int (*fun)(unsigned int); unsigned int Solution_T(unsigned int n)
{
return ;
} unsigned int Sum_Solution(unsigned int n)
{
static fun f[] = {Solution_T,Sum_Solution};
return n + f[!!n](n-);
} int main()
{
cout << "sum: " << Sum_Solution() << endl; return ;
}

  面试题47:

  

  代码如下:

  

#include<iostream>
using namespace std; int Add(int num1,int num2)
{
int sum,carry;
do{
//两个数先求异或,相同为0,相反为1
sum = num1 ^ num2;
//相与然后左移一位
carry = (num1&num2)<<; num1 = sum;
num2 = carry;
}while(num2 != ); return num1;
} int main()
{
cout << "num: " << Add(,) << endl; return ;
}

  总结:经过很长一段时间才把这本书看完并码代码,收获很多,数据结构和算法之路才刚刚开始,学习之路还很长,希望对各位能有所帮助。继续加油...,梦想还是要用有的,万一见鬼了呢!

剑指offer例题分享--8的更多相关文章

  1. 剑指offer例题分享--7

    前言:继续前面的分享... 面试题31: 代码如下: #include<iostream> #include<limits.h> using namespace std; bo ...

  2. 剑指offer例题分享--6

    前言:继续整理例题,快速做完这部分,然后继续用C++去刷数据结构和算法的题. 面试题28: 代码如下: #include<iostream> #include<stdio.h> ...

  3. 剑指offer例题分享--4

    前言:搁置许久的更新要继续开始了!前一段时间一直在忙项目和C++的学习,所以搁置了!要改变注意了,要用C++进行编写了,因为要不断练习C++! 面试题15: 书中要求只能遍历链表一次,所以代码如下: ...

  4. 剑指offer例题——跳台阶、变态跳台阶

    题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 思路: n<=0时,有0种跳法 n=1时,只有一种跳法 n=2时,有 ...

  5. 剑指offer 例题

    题目: 实现一个排序算法,排序对象是本公司员工的年龄.要求时间复杂度O(n),空间复杂度不能超过O(n). #include<iostream> using namespace std; ...

  6. 剑指offer例题——反转链表

    题目描述 输入一个链表,反转链表,输出新链表的表头 程序编写 将链表反转 public class Solution { public ListNode ReverseList(ListNode he ...

  7. 剑指offer例题——链表中倒数第K个结点

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 编程过程 此处采用两个指针依次后移的方法来求解,首先,用一个指针移到第k个位置,之后将第二个指针放在第一位,与第二个指针一同移动,当第二个指针移动 ...

  8. 剑指offer例题——二进制中1的个数

    题目:输入一个整数,输出该二进制表示中1的个数.其中负数用补码表示. 首先明确补码的定义: 原码 反码 补码 将最高位作为符号位(0表示正,1表示负), 其它数字位表达数值本身的绝对值的数字表示方式 ...

  9. 剑指offer例题——用两个栈实现队列

    题目:用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 首先是概念理解,栈和对列存取的区别 栈(stack)是一种后进先出(last in first out, LI ...

随机推荐

  1. Acceptance Test - Business Readable Acceptance Test using - Specflow

    Agenda Benefits Living document Frameworks specflow supports How to integrate it in development cycl ...

  2. [c#.net]遍历一个对象中所有的属性和值

    利用反射 SpDictItem sp = GetCFHObject.GetSpItem("); PropertyInfo[] propertys = sp.GetType().GetProp ...

  3. C#学习笔记14——TRACE、DEBUG和TRACESOURCE的使用以及日志设计

    Trace.Debug和TraceSource的使用以及日志设计   .NET Framework 命名空间 System.Diagnostics 包含用于跟踪执行流程的 Trace.Debug 和 ...

  4. #2019-2020-4 《Java 程序设计》第八周总结

    2019-2020-4 <Java 程序设计>第八周知识总结 第15章:泛型与集合框架 一.泛型 1.泛型(Generics)是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构: ...

  5. 2019.03.25 bzoj4539: [Hnoi2016]树(主席树+倍增)

    传送门 题意:给一棵大树,令一棵模板树与这棵树相同,然后进行mmm次操作,每次选择模板树中的一个节点aaa和大树中一个节点bbb,把aaa这棵子树接在bbb上面,节点编号顺序跟aaa中的编号顺序相同. ...

  6. LOJ-10094(强连通分量)

    题目链接:传送门 思路: 先缩点,然后统计入度为0的点即可. #include<iostream> #include<cstdio> #include<cstring&g ...

  7. Web打印控件Lodop实现表格物流单的打印

    Web打印控件Lodop实现表格物流单的打印 一.lodop打印预览效果图 LODOP.PRINT_SETUP();打印维护效果图 LODOP.PREVIEW();打印预览图 二.写在前面 最近项目用 ...

  8. 使用@Autowird注入报空指针异常

    new的对象不能调用此对象里面注入的其他类,如果想要调用注入的其他类,则此new的对象要使用@componet将此类注入. 原因:

  9. Py福利,基于uiautomatorviewer 的Python 自动化代码自动生成工具分享(jar已发布GitHub,欢迎Star)

    前言做UI自动化无论你用SDK自带的uiautomatorviewer还是Macaca还是Appium自动的inspector,代码最多的就是那些繁琐重复的找元素后点击,输入,长按.....等.现在偷 ...

  10. PyCharm连接远程服务器

    PyCharm连接远程服务器 1.Tools->Start SSH session 2.新建一个连接或者选择一个已经存在的sftp 3.选择Edit credentials 填写相关连接信息 4 ...