指针

双指针算法:数组元素的目标和

六月ゝ 毕业季﹏ 提交于 2020-01-22 02:16:33
题目链接:https://www.acwing.com/problem/content/802/ 题意 :给定两个 升序 排序的有序数组A和B,以及一个目标值x。数组下标从0开始。 请你求出满足A[i] + B[j] = x的数对(i, j)。 数据保证有 唯一 解。 数据范围 数组长度不超过100000。 同一数组内元素各不相同。 1≤数组元素≤109 输入样例: 4 5 6 1 2 4 7 3 4 6 8 9 输出样例: 1 1 思路 :两个单调数组,显然就可以用双指针来优化一下啦。 代码实现: # include <bits/stdc++.h> using namespace std ; typedef long long ll ; const int INF = 0x3f3f3f3f ; const int N = 1e5 + 5 ; int n , m , x ; int a [ N ] , b [ N ] ; int main ( ) { ios :: sync_with_stdio ( 0 ) ; cin . tie ( 0 ) ; cout . tie ( 0 ) ; cin >> n >> m >> x ; for ( int i = 0 ; i < n ; i ++ ) cin >> a [ i ] ; for ( int j = 0 ; j < m ; j +

const 指针不能给raw指针初始化

我的未来我决定 提交于 2020-01-22 02:00:19
a value of type “const cv::Point2f *” cannot be used to initialize an entity of type cv::Point2f * void GetFlow::drawflow(const cv::Mat& flowRes){ cv::Point2f* ptrRow=flowRes.ptr<cv::Point2f>(j);//错误 const不能初始为raw指针,这样ptrRow会发生改变,就违背了const的定义 } 来源: CSDN 作者: 半路出家的猿人 链接: https://blog.csdn.net/weixin_42184622/article/details/104061546

线性表

安稳与你 提交于 2020-01-22 01:47:06
一、线性表的结构体定义 #define MaxSize 100 typedef struct{ int data[maxSize]; int length; }Sqlist;//顺序表结构体定义 typedef struct LNode{ int data; struct LNode *next;//指向后继结点的指针 }LNode;//单链表结点定义 typedef struct DLNode{ int data; struct DLNode *proir;//前驱结点 struct DLNode *next;//后继结点 }DLDode;//双链表结点定义 PS:结点是内存中由用户分配的存储空间,只有一个地址来表达它的存在,没有显示的名称,因此我们会在分配链表结点空间的时候,同时定义一个指针,来存储这片空间的地址。(这个地址通常的讲叫指针指向结点,并且常用这个指针的名称来作为结点的名称) 例如: LNode *A = (LNode*)malloc(sizeof(LNode)); 即: Lnode x; // 声明一个Lnode类型的变量x Lnode *y; // 声明一个指向Lnode类型变量的指针变量y y=&x; // 正确。将y指向x。 printf( "sizeof Lnode is %d", sizeof(Lnode) ); // 显示Lnode类型变量的大小

指针变量后面的中括号数组表示什么意思?

こ雲淡風輕ζ 提交于 2020-01-22 01:25:28
在看etherCAT_slave_c28x_hal.c代码块的时候遇到如下写法: /******************************************************************************************/ 解析: 1、其中:对于表达式pEsc[((offset<<1))],C语言处理成运算符,pEsc[((offset<<1))] 等价于 *(pEsc+(offset<<1)), 因为:在C语言里,指针和数组关系密切。*pEsc, 一旦有指向地址后,就可以看成 一维数组pEsc[], 哪种形式便于阅读理解,就可以用哪种形式,所以pEsc[((offset<<1))] 等价于 *(pEsc+(offset<<1))。 2、在编译器看来数组名与指针是同一概念,比如这里的st其实就是*st,在编译器编译时,自动会把所有的[]处理为*()(声明除外)。比如st[5]编译时就变成了*(st+5),ps[i]就是*(ps+i)。 3、malloc叫动态内存分配,是在程序运行时分配的内存,内存区域为动态如;数组是在编译时分配,所以定义时需要给定明确的长度,分配的内存在静态区。至于你说的指针用下标取值,其实是因为数组用下标取值其实是先转化为指针的——a[i]先转化为*(a+i)。 4、至于(volatile uint16_t *

数据结构与算法之美-链表

风流意气都作罢 提交于 2020-01-22 01:09:58
什么是链表 和数组一样,链表也是一种线性表。 从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构。 链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next。 链表的特点 插入、删除数据效率高,时间复杂度为O(1),只需更改指针指向即可。 随机访问效率低,时间复杂度为O(n),需要从链头至链尾进行遍历。 和数组相比,链表的内存空间消耗更大,因为每个存储数据的节点都需要额外的空间存储后继指针。 常见的链表结构 单链表 每个节点只包含一个指针,即后继指针。 单链表有两个特殊的节点,即首节点和尾节点。 用首节点地址表示整条链表,尾节点的后继指针指向空地址null。 性能特点,插入和删除节点的时间复杂度为O(1),查找的时间复杂度为O(n)。 循环链表 除了尾节点的后继指针指向首节点的地址外均与单链表一致。 适用于存储有循环特点的数据,比如约瑟夫问题。 双向链表 节点除了存储数据外,还有两个指针分别指向前一个节点地址(前驱指针prev)和下一个节点地址(后继指针next)。 首节点的前驱指针prev和尾节点的后继指针next均指向空地址。 性能特点,和单链表相比,存储相同的数据,需要消耗更多的存储空间。 插入、删除操作比单链表效率更高,时间复杂度为O(1)。以删除操作为例

【Python】文件

人走茶凉 提交于 2020-01-22 00:53:03
目录 01.文件的基本操作 1.1 操作文件 1.2 操作文件的函数/方法 1.3 读取文件 2.4 打开文件的方式 02.文件的复制 2.1 小文件的复制 2.2 大文件的复制 01.文件的基本操作 1.1 操作文件 在计算机中操作文件的套路是分为三个步骤: 1)打开文件 2)读/写文件 3)关闭文件 1.2 操作文件的函数/方法 序号 函数/方法 说明 1 open 打开文件,并且返回文件操作对象 2 read 将文件读取到内存 3 write 将指定内容写入文件 4 close 关闭文件 open 只负责打开文件,并且返回文件对象 read/write/close 三个方法都需要通过文件对象来调用 1.3 读取文件 1.3.1 read方法(一次性读取) read 方法读取文件需要注意一下几点: 1) open 函数的第一个参数是要打开的文件名(文件名区分大小写) 2) read 方法一次性读取文件所有内容并返回 3) close 只负责关闭文件,如果忘记关闭文件,则会造成 资源浪费 或者 影响后续对文件的访问 # 打开文件,指定编码格式,避免无法读取中文 f = open("a.txt",encoding="utf-8") # 读取文件 content = f.read() print(content) # 关闭文件 f.close() 小提示: 开发过程中,通常会先编写

对Objective-C中Block的追探

匆匆过客 提交于 2020-01-21 22:27:00
最近看了很多block相关的文章,都在说block怎么用,写的都很精彩。 blogs: Block编程值得注意的那些事儿 (使用相关) http://www.cocoachina.com/macdev/cocoa/2013/0527/6285.html iOS中block实现的探究(内部结构分析) http://blog.csdn.net/jasonblog/article/details/7756763?reload 还有绪斌同学共享的(内部结构分析) https://www.evernote.com/shard/s269/sh/23b61393-c6dd-4fa2-b7ae-306e9e7c9639/131de66a3257122ba903b0799d36c04c?noteKey=131de66a3257122ba903b0799d36c04c&noteGuid=23b61393-c6dd-4fa2-b7ae-306e9e7c9639 又看了一本关于这方面的书: Pro Multithreading and Memory Management for iOS and OS X http://vdisk.weibo.com/s/9hjAV 觉得是可以总结一下我对block理解的时候了。 注:上面提供的资料有很多有用的背景知识比如block怎么用,什么时候应该加上_

双指针算法:最长连续不重复子序列

时光总嘲笑我的痴心妄想 提交于 2020-01-21 17:27:06
题目链接:https://www.acwing.com/problem/content/801/ 题意 :给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。 数据范围 1≤n≤100000 输入样例: 5 1 2 2 3 5 输出样例: 3 思路 :其实这种类型的题也可以暴力枚举做,不过时间复杂度就是O(n^2)了;利用双指针不断移动更新指针的位置,就可以把暴力的算法优化到O(n)了。 代码实现: # include <bits/stdc++.h> using namespace std ; typedef long long ll ; const int INF = 0x3f3f3f3f ; const int MAXN = 1e5 + 5 ; int a [ MAXN ] , s [ MAXN ] ; int main ( ) { ios :: sync_with_stdio ( 0 ) ; cin . tie ( 0 ) ; cout . tie ( 0 ) ; int n , ans = - INF ; cin >> n ; for ( int i = 1 ; i <= n ; i ++ ) cin >> a [ i ] ; for ( int i = 1 , j = 1 ; i <= n ; i ++ ) { s [ a [ i ] ] ++

【C++】多态类面试题

浪子不回头ぞ 提交于 2020-01-21 14:02:40
多态类面试题 什么是多态? 答: 不同的对象完成相同的事件(具有相同的函数),产生不同的结果(函数内部实现不同)。 什么是重载、重写、重定义? 作用域 函数名、参数、返回值的要求 其它的要求 重载 两个函数在同一作用域 函数名、参数相同 重写(覆盖) 两个函数分别在基类和派生类的作用域 函数名、参数、返回值都相同 两个函数必须是虚函数 重定义(隐藏) 两个函数分别在基类和派生类的作用域 函数名相同 基类和派生类的同名函数不构成重写就是重定义 多态的实现原理? 答: 通过虚基表实现。 构造函数可以是虚函数吗? 答:不可以。因为对象中的虚函数表指针是在构造函数初始化列表阶段才初始化的。 析构函数可以是虚函数吗? 答:可以。但是在某一种特定的条件下,必须将析构函数定义为虚函数。(见链接)。 虚函数可不可以定义成static类型的函数? 答:不可以。虚函数的地址要存到虚表中去,static不用对象就可以调用,那么没有对象,就没有虚表指针,就找不到虚表了。没有虚表就肯定不能实现多态。没有对象,就没有this指针,所以虚函数就是为了实现出多态,定义成static静态函数就找不到虚表,实现不了多态。 内联函数不能是虚函数 正确 虚函数可以定义成内联函数吗? 答:不可以。内联函数没有地址,每次用到内联函数的时候,都是在调用的地方进行了展开,普通函数有地址,调用的时候汇编代码中就call(调用的意思

四、指针的使用

北慕城南 提交于 2020-01-21 10:08:22
1.指针赋值 ① int i , *p , *q; p = &i;//p获取i的地址 q = p;//指针变量p把地址拷贝给指针变量q *p = 1;//改变i的值为1 *q = 2;//改变i的值为2 ② int i , j , *p , *q; p = &i;//指针变量i获取i的地址 q = &j;//指针变量q获取j的地址 i = 1;//给i赋值为1 *q = *p;//把指针p的值拷贝给指针q printf(“%d %d\n”,*p,*q);//输出 2.指针与一维数组 ①数组名代表数组的首地址,是一个地址常量,即数组首元素地址 示例: void printfMaxValueOfArray(int array[] , int count); void printfMaxValueOfArray(int array[] , int count){ int max = 0; for(int i = 0 ; i < count ; i ++){ if(max < array[i]){ max = array[i]; } } printf(“max = %d”,max); } int main(){ int number[] = {10,20,15,3,8,9,100}; printfMaxValueOfArray(number,sizeof(number) / sizeof