704.二分查找
给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
示例 1:
输入:nums
= [-1,0,3,5,9,12],target
= 9 输出: 4 解释: 9 出现在nums
中并且下标为 4
代码详解:
class Solution {
public:
int search(vector<int>& nums, int target) {
int IndexL=0;//定义左节点索引
int IndexR=nums.size()-1;//定义右节点索引
int IndexM=(IndexL+IndexR)/2;//得到中间节点索引
while(IndexL<=IndexR)//如果右边大于左边循环
{
int num=nums[IndexM];//记录当前的中间节点
if(num==target)return IndexM;//如果目标就是中间节点直接返回
else if(num>target)//如果中间节点大于目标节点说明需要查找的数在中间节点左侧
{
IndexR=IndexM-1;//移动最右节点至中间节点-1
IndexM=(IndexL+IndexR)/2;//重新记录节点
}
else{
IndexL=IndexM+1;//同上
IndexM=(IndexL+IndexR)/2;
}
}
return -1;
}
};
面经:
1. c++中类的三大特性
在C++中,类的三大特性是指封装、继承和多态
- 封装:它指的是将数据和操作数据的函数捆绑在一起,形成一个对象。在C++中,通过访问修饰符(public, private, protected)来实现封装。封装的目的是隐藏对象的内部细节,仅对外提供有限的接口,从而保护对象不被外部任意访问和修改。
public成员可以在类的外部被访问。
private成员只能被类的内部成员函数访问。
protected成员可以被类本身、子类以及类的友元函数访问。
- 继承:继承允许我们根据一个类(称为基类或父类)来创建新的类(称为派生类或子类)。派生类继承了基类的方法和属性,可以添加新的方法和属性,或者修改继承来的行为。继承机制促进了代码的复用,并且建立了类之间的关系层次。
公有继承:基类的公有成员和保护成员在派生类中保持其访问属性。
保护继承:基类的公有成员和保护成员在派生类中变为保护成员。
私有继承:基类的公有成员和保护成员在派生类中变为私有成员。
- 多态:多态是指在继承关系中,同一个操作作用于不同的对象时可以有不同的解释和行为。在C++中,多态通常通过虚函数实现,允许使用基类的指针或引用来调用派生类中重写的函数。
要实现多态,通常遵循以下步骤:
在基类中声明虚函数,在派生类中重写这些虚函数。
使用基类的指针或引用来指向派生类的对象。
当通过基类指针或引用调用虚函数时,会根据对象的实际类型来调用相应的函数版本。
2. 什么是构造函数和析构函数,他们有什么作用
构造函数
语法:类名(){}
构造函数的作用是为成员变量赋值,由编译器自动调用无需手动调用。
构造函数的特点:
- 没有返回值不写void
- 名与类名相同
- 在调用对象的时候自动调用一次
- 可以有参数,可以重载
- 实现构造函数后,编译器将不再提供默认构造,但是会提供默认拷贝构造
- 如果实现了拷贝构造则编译器将不提供其他构造
析构函数
语法:~类名( ){ }
析构函数的作用是释放指针类型成员变量指向的内存堆区
析构函数特点:
- 没有返回值不写void
- 名与类名相同
- 没有参数,不能重载。
- 在对象销毁前自动调用一次
标签:函数,nums,成员,基类,冲刺,派生类,实习,节点,第十三天 From: https://blog.csdn.net/m0_74381802/article/details/143494418