LeetCode刷题笔记(一)---剑指Offer前二十

1、c++中有可以直接用的排序算法:sort函数,具体用法为sort(iterator start, iterator end );放入数组的起始位置和终止位置即可,比如sort(nums.begin,nums.end);
sort()函数是标准模板库的的函数,已经进行了优化,根据情况的不同可以采用不同的算法,所以较快。另外,sort()是类属函数,可以用于比较任何容器,任何元素,任何条件。

2、c++中获取二维数组行列数的方法:行:sizeof(a)/sizeof(a[0]),列:sizeof(a)/sizeof(a[0][0])
或者行:a.size()列:a[0].size();

3、c++反转数组:这个是使用C++STL库里的reverse函数,需要包含头文件
• vector reverseArray(vector a)
{
reverse(a.begin(),a.end());
return a;
}

4、在c++中,vector是一个十分有用的容器。
作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据;
vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库;
实例:vectortest; //建立一个vector,int为数组元素的数据类型,test为动态数组名;
尾部插入数字:test.push_back(a);
两个数组连接 test.insert(test.end(),test2.begin(),test2.end());

5、队列(queue)的基本操作:先进先出
入队,如例:q.push(x); 将x 接到队列的末端。
出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问队首元素,如例:q.front(),即最早被压入队列的元素。
访问队尾元素,如例:q.back(),即最后被压入队列的元素。
判断队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()

6、广度优先搜索(BFS)与深度优先搜索(DNS)
BFS基本思想

基本步骤:

1.从图中某个顶点v0出发,首先访问v0;

2.依次访问v0的各个未被访问的邻接点;

3.依次从上述邻接点出发,访问它们的各个未被访问的邻接点。

4.若此时图中仍有未被访问的结点,则另选图中的一个未被访问的顶点作为起始点。重复广度优先搜索过程,直到图中的所有节点均被访问过。
LeetCode刷题笔记(一)---剑指Offer前二十_第1张图片
LeetCode刷题笔记(一)---剑指Offer前二十_第2张图片

DFS基本思想

基本步骤:

1.从图中某个顶点v0出发,首先访问v0;

2.访问结点v0的第一个邻接点,以这个邻接点vt作为一个新节点,访问vt所有邻接点。直到以vt出发的所有节点都被访问到,回溯到v0的下一个未被访问过的邻接点,以这个邻结点为新节点,重复上述步骤。直到图中所有与v0相通的所有节点都被访问到。

3.若此时图中仍有未被访问的结点,则另选图中的一个未被访问的顶点作为起始点。重复深度优先搜索过程,直到图中的所有节点均被访问过。
LeetCode刷题笔记(一)---剑指Offer前二十_第3张图片
LeetCode刷题笔记(一)---剑指Offer前二十_第4张图片

7、pair是C++中一种模板类型。每个pair对象可以存储两个值,这两个值可以是不同的数据类型。存储的值可以是基本数据类型也可以是自定义数据类型。
声明命名空间:

using namespace std;

using std::pair;
pair pdata;
或使用全名
std::pair pdata;

一、定义和初始化

pair p1(1, 2);

pair p2(p1); //用已有的对象初始化

pair p3(1, 1.2);

pair p4; //没有显示初始化,自动执行默认初始化操作。p4为(0,0)

二、赋值操作

1、使用强制类型转换

pair p1(1, 2);

pair p2;

p2 = pair (1, 4);//赋值操作,需要用强制转换

p2 = p1; //赋值操作

2、使用make_pair()函数

pair p3;

p3 = make_pair(1, 4); //无需指明类型,可自动生成pair对象

三、访问和修改操作

pair有两个属性:first和second。

pair p1(1, 2);

p1.first = 11; //修改第一个数值

p1.second = 22; //修改第二个数值

cout << p1.first << "," << p1.second << endl;

8、数学运算
LeetCode刷题笔记(一)---剑指Offer前二十_第5张图片
9、1< 例如1<<2 则0001->0100
n&(1< 如果n第i位为0,则n&(1< 否则不为0
常用if(n&(1<

10、对于二进制位的运算符

  1. & : 与 操作.作用于两个二进制数,当然也可以对整型数据进行操作(当两边为整型数据会自动转化为二进制数).二进制与用来对位进行置零或者复位.如果两个值进行二进制与,只有当两个对应的位都为1时结果位上为1(同1结果为1,有0结果为0),其他情况都为0.如下:
          01011001 & 00101001
          结果为:00001001
  2. | :或 操作.和1的与操作类似.用来合并值.只有当两个对应位都为0,结果位为0(有1结果为1,同0 结果为0),其他情况都为1.例如:
          01011001 | 00101001
          结果为:01111001
  3. ^ :异或 操作.这个运算符当两个值在某一位上相同时结果位为0,不同结果为1.如一个是1一个是0(相同为0 不同为1),结果位是1;两个都为1或者0结果位是0;例如:
          01011001^00101001
          结果为:01110000
    4.~ :求补操作.这个运算符只对一个二进制数据进行操作,对该数每一位取反,(即1变为0,0变为1).例如:
        ~01011001
        结果为:10100110
      最后两个为移位操作符.这两个操作符用来对一个值中的位左移或右移某个特定数字的位数.">>“右移操作.”<<"左移操作. "<<"左移操作:向左移动n位,相当于原数乘以2的n次方;存在问题:左移可能改变一个数的正负;
    ">>"右移操作:向右移动n位,值等于原值除以2的n次方;
    例如:
        01011001>>2  01011001<<2
        结果为:0010110  01100100

你可能感兴趣的:(刷题笔记,面试,程序人生,经验分享)