博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer第2章学习(2)
阅读量:4673 次
发布时间:2019-06-09

本文共 2107 字,大约阅读时间需要 7 分钟。

d第2章还有很多要注意的问题,以下知识点需要重点注意

  1. C++面向对象的特性
  2. 构造函数
  3. 析构函数
  4. 动态绑定
  5. 运算符重载
  6. 常量引用
  7. 设计模式
  8. UML图
  9. C++对内存的使用管理
  10. 字符串的处理
  11. 冰法控制
  12. 复杂度的计算
  13. 文件操作
  14. 程序性能
  15. 多线程
  16. 程序安全

 

 

各种排序算法都有各自的使用范围。例如快速排序,如果数组本身已经排好序了,那么再使用它进行排序工作量为 O(n^2)。

面试之中最常用的数据结构有:

  1. 数组
  2. 字符串
  3. 链表(最常用)
  4. 树(最常用)
  5. 队列(和广度优先算法紧密相关)
  6. 栈(和递归紧密相关)
2.4算法和数据操作

重点掌握的3种算法

  1. 二分查找
  2. 归并排序
  3. 快速排序
//对公司所有员工的年龄进行排序//假定,所有员工的年龄从15岁到60岁不等//非常简单,没什么可说的void SortAge(int data[], int length){        const int Youngest = 15, Oldest = 60;    if (data == NULL || length <= 0)        return;    int Age[Oldest - Youngest + 1];    for (int i = Youngest; i <= Oldest; ++i)    {        Age[i] = 0;    }    for (int i = 0; i < length; ++i)    {        int age = data[i];        if (age
Oldest) throw exception("age out of range"); Age[age]++; } int index = 0; for (int i = Youngest; i < Oldest; ++i) { for (int j = 0; j < Age[i]; j++) { data[index++] = i; } }}
 

 

 
//面试题8 找到数组中的最小数字int Min(int num[], int length){        if (num == NULL || length <= 0)        throw exception("Invalid Input");    int index1 = 0;    int index2 = length - 1;    int indexmid = index1;    while (num[index1] >= num[index2])    {        if (index2 - index1 == 1)        {            indexmid = index2;            break;        }        indexmid = (index1 + index2) / 2;        if (num[indexmid] >= num[index1])            index1 = indexmid;        else if (num[indexmid] <= num[index2])            index2 = indexmid;    }    return num[indexmid];}

 

面试题9:斐波那契数列,虽然是一个递归的典型例子,但是在递归的过程中,重复计算的内容太多,反而用循环就可以轻松解决这个问题。

int Fibonacci(int n){    if (n == 0)        return 0;    if (n == 1)        return 1;    int IndexNew=1;    int IndexOld=1;    int result=1;    for (int i = 1; i < n; ++i)    {        IndexOld = IndexNew;        IndexNew = result;        result = IndexNew + IndexOld;    }    return result;}

那么就再接着做一做扩展题目。发现仍然是一道典型的斐波那契数列解法的题目。代码我完全一样。就不再写了。

2.4.3 位运算

在位运算中,有左移和右移的情况,右移的情况稍微复杂一些。如果本来该数是正数的话,右移的时候空位补0,如果为负数的话,那么空位就补1。

除法的效率比位运算要低得多。能用位运算的时候要尽可能的用位运算。

哈希表和二叉排序树查找的重点在于考察对应的数据结构。

哈西白哦能够在O(1)的时间内查找某一元素。

转载于:https://www.cnblogs.com/chengxuyuanxiaowang/p/4321895.html

你可能感兴趣的文章
C++变量作用域、生存期、存储类别
查看>>
数据结构期末复习(四)
查看>>
最最简单的菜单代码
查看>>
js 俩组数据根据id合并
查看>>
POJ2987 Firing 最大权闭合图
查看>>
ItelliJ IDEA下载及获取注册码详解
查看>>
ASP.NET AjaxPro的应用 .AjaxPro使用中“XXX未定义”的一种解决方法(转载的)
查看>>
谷歌和HTTPS
查看>>
Linux 系统的IP与域名解析文件[局域网的DNS]
查看>>
各种实用类
查看>>
【LGP5161】WD与数列
查看>>
最近素数问题——C语言
查看>>
Oracle和Mysql的区别 转载
查看>>
GOF23设计模式
查看>>
Python自然语言处理学习笔记(41):5.2 标注语料库
查看>>
新手安装Ubuntu操作系统
查看>>
山寨“饿了么”应用中添加菜品数量按钮效果
查看>>
【Fate/kaleid liner 魔法少女☆伊莉雅】系列中实践的、新世代的动画摄影工作流...
查看>>
TCP/IP系列——长连接与短连接的区别
查看>>
Linux基础——常用命令
查看>>