![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试算法
qq_36346625
这个作者很懒,什么都没留下…
展开
-
单例模式(2)
面试的时候被问到单例模式如何只创建一个实例对象?在一个类中怎么能调用构造函数呢?没回答上来。单例模式和工厂模式程杰的《大话设计模式》上有,讲得很通俗易懂。单例模式有3个要点:(1)某个类只能有一个实例(那如何确保它只有一个实例?)在创建对象的时候,先判断对象是否存在?(2)它必须自行创建这个实例(那它又是如何来创建这个实例呢?)通过另外一个函数调用构造函数。(3)它必须自行向整个系统提供这个实例那如何自行提供呢?返回一个我自己。public class GirlFriend{ privat原创 2021-10-15 10:03:25 · 95 阅读 · 0 评论 -
武汉卓越科技面试复盘
武汉卓越科技,面试问的八股文1、32位系统中,一个指针占4个字节?2、vector在多线程环境是否安全?答案是安全的。多线程使用–vector是线程安全的,方法同步,使用多线程时效率不高。3、vector的resize和reverse有什么区别?C++引用网址std::vector::reverse(size_type n);要求vector容器的容量至少能够满足包含n个元素。如果n大于vector当前的容量,这个方法会使容器重新分配存储提升容量到n或者是大于n。如果n不大当前的容量,函数调原创 2021-10-01 20:19:21 · 240 阅读 · 0 评论 -
八大排序算法(4)选择排序
选择排序的思想:每次都从未排序的序列中选出最大或最小的元素,放到已排好序的前部或者后部。程序:#include <iostream>using namespace std;void SelectSort(int a[], int length) { for (int i = length - 1; i > 0; i--) { int IndexOfMax = i; int j = 0; for (j = 0; j < i; j++) { if (a[j]原创 2021-09-26 11:15:55 · 71 阅读 · 0 评论 -
八大排序算法(3)插入排序
插入排序的思想:就像打牌一样,每摸一张牌,就把这张牌插入到手上已经排好序的牌中。程序:#include <iostream>using namespace std;void InsertSort(int a[], int length) { for (int i = 0; i < length; i++) { for (int j = i; j > 0; j--) { if (a[j - 1] > a[j]) { int temp = a[j];原创 2021-09-26 10:39:52 · 60 阅读 · 0 评论 -
八大排序算法(2)快速排序
快速排序的思想(比较口水话的描述):首先首尾各设置一个下标,选择其中一端的一个作为哨兵,然后先从数组的一端不断遍历与哨兵比大小。一直遍历过程中有两种情况:(1)与哨兵比较一直满足条件,到达了数组的另外一端,此时应该结束遍历;(2)与哨兵比较不满足条件的时候,说明当前位置比哨兵大或者小,把这个数与另外一端在的位置的数进行交换;交换结束之后到另外一端不断遍历。遍历情况和之前的一样。当两边遍历相遇的时候,就是哨兵所在的位置。具体看程序吧。程序:#include <iostream>usi原创 2021-09-26 10:22:58 · 84 阅读 · 0 评论 -
八大排序算法(1)冒泡排序
冒泡排序的思想:两两相邻的元素进行比较,如果不满足条件就交换位置。程序:#include <iostream>using namespace std;void BubbleSort(int a[], int length) { //注意冒泡排序是相邻两两比较,且j的遍历长度是在不断缩短的 for (int i = 0; i < length; i++) { for (int j = 1; j < length - i; j++) { if (a[j - 1]原创 2021-09-26 09:52:12 · 66 阅读 · 0 评论 -
面试被问到的二分查找
其实有序序列的二分查找,思想很简单。就是和中间的值比较然后决定是在左半部分还是右半部分查找。特别需要注意的点:当在右半边查找的时候,中间的位置要加上左边的起始位置,这才是中间位置的绝对位置。程序实现:#include <iostream>using namespace std;int binSearch(int a[], int n, int length) { int left = 0; int right = length - 1; while (left <=原创 2021-09-23 21:11:01 · 82 阅读 · 0 评论 -
网易互娱的一道笔试题
题目描述:一张图被裁剪成N行M列,知道每张图片的编号,以及和它上下左右相邻的图片编号,将这张图拼接回去。输入描述:N(空格)M接下输入N*M行,每行5个数:第1个数是当前图片的编号,第2个数是当前图片的左边的图片的编号,第3个数是当前图片的上边的图片的编号,第4个数是当前图片的右边的图片的编号,第5个数是当前图片的下边的图片的编号,当相邻的图片没有时,输入0表示。数字与数字之间空格隔开。如下:3 31 2 4 8 62 0 5 1 73 4 0 0 84 5 0 3 15 0 0 4 2原创 2021-09-23 11:37:43 · 364 阅读 · 0 评论 -
兑换饮料瓶数
碰到过的一道笔试题:晓明手上有n个空瓶子,每3个空瓶子可以兑换1瓶新饮料。问晓明可以喝到多少瓶饮料。思路:一看题目中没有涉及任何数据结构和算法的内容。这是一道数学题,缕清数学关系就可以了。(1)3个空瓶子可以兑换1瓶新饮料,那么现有的瓶子n要减去3,即n-3;(2)兑换之后又得回一个新瓶子,喝了之后就是空瓶子了。即每次兑换之后,手上又多了1个空瓶子,即(n-3)+1;------------> 即 n - 2(3)每次成功兑换之后,晓明就喝到1瓶新饮料。所以只要兑换成功1次,喝的饮料瓶数+原创 2021-09-23 10:42:28 · 558 阅读 · 0 评论