剑指offer 面试题0:扎实的基础:即编程语言、数据结构和算法
编程语言:
Q:如果写的函数需要传入一个指针,则是否需要为该指针加上const?把const加在指针不同的位置是否有区别?
A:const是用来声明一个常量的,如果不想让一个值改变就应该加上const。首先来看如下的一段代码:
int a = 100;
const int *b = &a; // 1
int const *b = &a; // 2
int *const b = &a; // 3
const int *const b = &a; // 4
区分常量指针和指针常量的一个方法是,看const是在星号的左边还是右边。如果是1与2的形式则是常量指针(指针指向的内容为常量),因为const与放在变量声明符的位置无关,故1与2等价,这种形式 *b 不能变,但 b 能变,即指针指向的内容不能变,但指针的指向能变。如果是3的形式则是指针常量(指针本来就是常量),这种形式*b能变,但b不能变,即指针指向的内容能变,但指针的指向不能变。
Q:如果写的函数需要传入的参数是复杂类型的实例,则传值和传引用有什么区别?什么时候应该为传引用加上const?
A:分为三种情况。
1. 用const修饰函数传入的参数
对于非内部数据类型,比如一个复杂类的实例,应该是将传值改为传引用,目的是减少拷贝(例如调用拷贝构造函数),提高效率。但是对于内部数据类型,例如int,不能将传值改为传引用,否则不但不能提高效率,反而降低代码的可读性。
2. 用const修饰函数的返回值
如果以指针类型的方式作为函数的返回值,加上了const,则代表函数返回值(指针)的内容不能被修改,且只能被赋值给加const修饰的同类型指针。当然,用const_cast可以去电const属性。如果以值类型的方式作为函数的返回值,由于返回值会拷贝到临时变量中,故加上了const没什么用。如果以引用类型的方式作为函数的返回值,加上const这种情况并不多,但是在类的赋值号重载时就必须加上const,目的是为了链式表达。
3.用const修饰成员函数
为了提高代码的健壮性,任何不会修改数据成员的成员函数都应该被修饰为const,且注意const要加在参数列表后面。
数据结构:
1.熟练掌握链表、树、栈、队列和哈希表等数据结构及其相关操作?
答:
2.链表的插入和删除节点如何写?
答:
3.树的6中遍历怎么写?
答:
算法:
1.了解各种查找和排序算法的原理及时间空间复杂度等?
答:
2.重点掌握二分查找,二叉排序树查找?
答:
3.重点掌握插入排序、冒泡排序、归并排序、快速排序?
答:
4.了解动态规划和贪婪算法等原理?
答:
剑指offer 面试题0:扎实的基础:即编程语言、数据结构和算法的更多相关文章
- 剑指offer 面试题0:高质的代码:即考虑边界条件、特殊输入和错误处理
Q:把一个字符串转换为整数. A1:一个普通但漏洞百出的解法. int StrToInt(char* str) { int number = 0; while (*str != 0) { number ...
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- 剑指offer面试题3 二维数组中的查找(c)
剑指offer面试题三:
- 剑指Offer——笔试题+知识点总结
剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...
- C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
- C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...
随机推荐
- 【题解】AcWing 389. 直径
原题链接 题目描述 共两个问题,第一问求树的直径长度,第二问求直径的必须边 思路 第一问很好求,lyd书里有,就不再赘述. 这里建议使用两次bfs的方法,因为关系到第二问的路径,这么做比较方便. 然后 ...
- P1654 OSU! 题解
\(x\) 为该位置有 \(1\) 的期望. 统计两个值 : \(suma\) 和 \(sumb\). \(suma\) 表示连续 \(X\) 个 \(1\) , \(X\) 的平方的期望, \(su ...
- Acwing 734. 能量石
贪心(微扰) + dp 这道题还是比较难的,前置知识: 贪心的微扰(邻项交换)证法,例题:国王游戏,耍杂技的牛 01背包 算法1:暴力\(O(T * n! * n)\) 可以\(dfs\)全排列枚举所 ...
- C++11新特性 变参模板、完美转发(简述)
变参模板 (Variadic Template) - 使得 emplace 可以接受任意参数,这样就可以适用于任意对象的构建 完美转发 - 使得接收下来的参数 能够原样的传递给对象的构造函数,这带来另 ...
- 七、TestNG传递参数2
数据提供者本身可以接受两个类型的参数:Method和ITestContext 在创建@DataProvider方法是可以有四种格式如图: 第一种在上一篇中有学到 1-Methode参数使用 @Data ...
- JeecgBoot table 渲染图片
使用jeecgboot框架,在table列表显示图片 使用Column 的customRender属性 通过以上设置,就会在列表页显示图片了
- Spring MVC整合 freemarker
1.什么是Spring MVC? Spring MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦,基于请求驱 ...
- Python 带你高效创作短视频,视频创作秀到飞起!!!
近两年,抖音.快手将短视频推到风口浪尖上,要生产出高质量的视频,离不开视频剪辑这一环节:在全民剪片浪潮中,大众使用最多的剪辑软件如:Pr.FCPX.剪印.Vue 等. 视频剪辑过程中,Python 一 ...
- H3C路由器配置示列一
说明: 如上图所示,192.168.0.0网段是总公司的网络,192.168.3.0和192.168.4.0网段是当前自己分公司的网络,且192.168.3.0是内网不能访问互联网,192.168.4 ...
- MongoDB导入bson文件(元数据),mongorestore命令行方式导入
MongoDB导入bson文件(元数据),mongorestore命令行方式导入 不推荐使用MongoDB Compass等图形化数据库管理软件,例如MongoDB Compass只能导入json和c ...