荣耀笔试
荣耀机试岗位:(无线通信协议工程师)
题一和题二easy,不再赘述了~
P3:1702. 修改后的最大二进制字符串
【解题思路】贪心思路,00->10是将数字变大,10->01可以将1右移,因此可以将比特流转换为左1中间0右边1的情况。主要思路是计算出最后一个0所在的位置begin+cnt-1,其中begin是指第一个0出现的位置,cnt是指0出现的次数。代码如下:
12345678910111213141516string maximumBinaryString(string binary) { int n=binary.length(); bool flag=false; int cnt=0,index=1e6; for(int i=0;i<n;i++) { if(binary[i]=='0'){ cnt++; index=min(index,i); ...
高通一面
高通电话面【 笔试部分】
4.19号做完笔试,题型包含三部分,单项选择(20个)、不定项选择(10个)和填空(10个)。
单项选择部分包含有
【 电话面试】
从C语言开始聊,让我准备好笔和纸。问了一堆的C/C++语言知识:
1、static关键字的特点、C/C++的内存划分结构,静态变量在哪存储?使用static的关键字有什么特点?答:
2、new和malloc变量的位置。答:讲了内存结构:栈堆静态和全局变量区、常量存储区、代码段,以及每个区域的特点~
2、unsigned char和char 变量的存储范围?答:0255 -128127
3、如何通过指针操作一次给结构体赋值,结构体中包含四个char变量或uchar变量?答,初始化列表,和有参构造函数
追问:不能通过构造函数的方式,最后提示下是通过int指针赋值一个int大小的数值。
追问:四个变量如何赋值1、2、3、4,答了0x01020304,
追问:确定吗?只有这一种?又回答了Ox04030201,讲了大端和小端问题~
4、int*指针一次后值有什么变化?答:偏移四个字节。
5、结构体 ...
类型推导
PART3:原有语法的实用性增强特性1:类型推导auto和decltypeauto关键字
1、背景在以前的C++中,auto关键字用于指明变量的存储类型,和static关键字是相对的。auto表明变量是自动存储的,这也是编译器的默认规则,因此写不写系统都会自动加上。例如int a=10;// auto int a=10;表示a自动存储
而在C++11后为了顺应c# JAVAScript PHP等语言的自动推导变量的特性对auto重新赋予新的含义。
2、使用方法auto关键字的基本使用语法包含有定义一个变量、连续定义多个变量。案例如下:
案例1:定义一个变量
12345678// 案例一:定义一个变量auto valueName=value; // VlaueName是变量名称,value是变量的值// 具体实例auto n = 10; // n为intauto f = 12.8; // f浮点型,默认为doubleauto p = &n; // p为int*的指针auto url = "http://c.biancheng.net/cplus/"; / ...
强制类型转换
C++的四种强制转换C++中的数据类型,可以分为:整形、浮点型、字符型和布尔型。四种强制转换(主要用于不同类型之间的转换)包含有
static_cast:主要用于数据类型的强制转换,强制将一种数据类型转换为另外一种数据类型。
const_cast:主要用于去除不能被修改的常数特性,它并非去除原有变量的常量性,而是去除指向常量对象的指针或引用的常量性。==去除const和voliate==两个特性。
reinterpret_cast:主要用于处理无关类型的转换。该运算符不会改变括号中运算对象的值,而是对该对象从位模式上进行重新解释。
dynamic_cast:主要用于“类继承层次间的指针或引用安全地向下转型”。
static_cast功能:主要用于数据类型的强制转换,强制将一种类型转换为另一种数据类型。例如,将浮点类型转换为整数类型。
使用方法:static<要转换的类型>(变量或表达式)
对于C语言中转换案例如下:
123int a=10;int b=4;double ans=(double)a/(double)b;
而在C++中采用static_cast的方式如下所 ...
位运算总结
位运算总结(一)常见问题:计算一个数字中的最低位为1的位置、或者统计数字中1的个数常见的问题为计算一个数字的二进制中最低比特位为1的位置、以及比特位为1的数量,解法有使用GCC库函数:__bulitin_popcount(uint)、lowbit以及暴力法(循环判断每一位是否为1)。
思路1:利用库函数__bulitin_popcount(uint)。
思路2:利用n&(-n)的结果恰好为n的为最低位置为0的结果,例如6(110)&5(101)=4(100)。
12345678910int getCount(int x){ int ans=0; while(x) { ++ans; x&=(x-1); } return ans;}
思路3:利用lowbit()
1234567891011121314int lowbit(uint x){ return x&(-x);}int getCount(int x){ int ans ...
初始化列表
初始化列表
分别从初始化列表的作用、优点&为什么高效、使用要求三方面介绍。
1、初始化列表的作用:主要用于对于成员变量的初始化,使用方式是在构造函数后面使用一个冒号,再进行成员变量的赋值。例如,如下类中成员变量的赋值:
123456789101112131415class Myclass{public: MyClass(int num1,int num1):i(num1),j(num2) // 使用初始化列表进行初始化 { } ~MyClass() { }public: int i; int j; }
注:在使用初始化列表进行初始化时需要按照类中定义变量的顺序进行初始化,否则可能会导致一些值没有初始化。
1234MyClass(int num1):j(num1),i(j) // 编译器会首先初始化i,但由于j此时没有初始化,导致i值未定义 { }
结果如下:
2、优点&原因
初始化类的成员有两种方式:一种是使用初始化列表,另外一种是在构造函数体进行赋值操作。对于内置类型, ...
C++中所有的构造函数
C++中所有的构造函数构造函数的作用:当创建对象时,系统分配了内存空间后,会自动调用相应的构造函数。
默认构造函数:没有参数,如果创建一个类,没有定义任何的构造函数,系统会自动生成默认的构造函数。
一般构造函数:含有参数的构造函数,一个类可以含有若干个一般构造函数,前提是构造函数之间的参数数量或类型不同。
拷贝构造函数:参数为该类的常量引用对象,如果类中没有定义拷贝构造函数,系统会默认生成一个拷贝构造函数,但是是浅拷贝。
123456789101112131415161718 // 重载拷贝构造函数,重载后的拷贝构造函数支持深拷贝 ClassA(ClassA &obj) { // 拷贝 stack 域的值 m_nId = obj.m_nId; // 新建 heap 空间 m_pszName = new char[strlen(obj.m_pszName) + 1]; // 拷贝 heap 空间的内容 if (m_pszName != NULL) & ...
接雨水
接雨水问题问题描述:42. 接雨水
该问题的解决思路有如下三种:
双指针解法
动态规划
单调栈解法
双指针解法:对于每个位置找到左边的最大值(LeftMax)和右边的最大值(RightMax)。计算每一个位置可以接到的雨水值为(min(RightMax,LeftMax)-height[i])*1,最后将所有的位置可以接到雨水累加起来。
例如,下图中4的左侧最大值位置在3,右侧最大值位置在7,因此4处的雨水量为$(min(2,3)-2)*1$
代码如下:时间复杂度为$O(n^2)$,空间复杂度为$O(1)$
12345678910111213141516171819int trap(vector<int>& height) { int ans=0; int n=height.size(); for(int i=0;i<n;i++) { if(i==0 || i == n-1) continue; // 左边最高值 i ...
蓄水池抽样
蓄水池抽样要解决的问题:不知道有多少个元素的情况下,随机选取m个数字,并使得每个数字被选择的概率相同。
解决方法:从前开始处理每个样本,==并使得每个样本的概率为$1/i$==,其中$i$为样本编号(编号从1开始),最终可以确保每个样本成为答案的概率为$1/n$(其中$n$为样本总数)。
推理如下:
化简得:
最终结果为:
代码如下:
1234567891011int getRandom() { int idx=0; int ans=0; auto tmp=head; while(tmp){ idx++; if(rand()%idx==0) ans=tmp->val; tmp=tmp->next; } return ans; }
上述的if(rand()%idx==0) ans=tmp->val;代表选中该数字。
《少有人走的路》第一章
第一部分:自律
人生苦难重重。
解决人生问题的首要方案,乃是自律。局部的自律只能解决局部的问题,完整的自律才能解决所有的问题。
人生是一个面对问题并解决问题的过程。
面对问题和解决问题的痛苦,能让我们得到最好的学习。
面对问题,聪明者不因害怕痛苦而选择逃避,而是迎上去,直至将其战胜为止。
神经官能症:一组精神障碍的总称,包括神经衰弱、强迫症、焦虑症、恐怖症等,现称为神经症(neurosis)。
区别:患有神经官能症的人能为自己强加责任,患有人间失格的人却不愿为自己承担责任。
所谓自律,是以积极而主动的态度,去解决人生痛苦的重要原则,主要包含四个方面:推迟满足感,承担责任,尊重事实,保持平衡。
推迟满足感意味着不贪图暂时的安逸,重新设置人生快乐与痛苦的次序:首先,面对问题并感受痛苦;然后,解决问题并享受更大的快乐,这是惟一可行的生活方式。(“先吃苦,后享乐”)
缺乏自律的原因:
基因的作用并不明显。
家庭教育起相当大的作用。
父母习惯用严厉的体罚教训孩子,本质上不是教育,而是发泄怨气和不满。
父母的爱,决定了家庭教育质量的优劣。充满爱的教育带来幸运;缺乏爱的教育 ...