- 博客(77)
- 收藏
- 关注
原创 折半查找法(二分查找法)
折半查找的方法的优点是比较次数少,查找速度快,平均性能好;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。列表中有11个元素(6,12,15,18,22,25,28,35,46,58,60),给出使用折半查找法查找12的过程。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
2022-11-16 18:49:29
1150
原创 C++继承
封装:封装是把客观事物抽象成类,并且多态:允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。这就意味着。
2022-11-15 21:21:36
740
原创 C++模板
模板(Template)指C++程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计。C++ 的标准库提供许多有用的函数大多结合了模板的观念,如STL以及IO Stream。模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。模板是一种对类型进行参数化的工具;如下代码所示sort是一个模板函数。举例:将Max模板化。
2022-11-14 18:19:35
496
原创 27、移除元素
例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。输入:nums = [0,1,2,2,3,0,4,2], val = 2。元素的顺序可以改变。
2022-11-11 18:27:38
126
原创 C++对象与对象的关系
在概念上,它们都是对象实例间的一种静态关系,都是在类的抽象层次上的定义,并且最终都可以通过对象的属性来体现。但它们差别是,聚合关系所涉及的两个类型的对象,在现实世界中的含义有明显的has - a (有一个)的语义,能够区分哪个是整体,哪个是部分,而关联所涉及的对象之间没有这种语义,即分不出整体和部分的关系。程序类之间的“依赖”关系主要体现出的是一种使用关系,对于两个相对独立的对象, 当一个对象负 责构造另一个对象的实例,或者当一个对象依赖于另一个对象所提供的服务时,这两个对象之间主要体现为依赖关系。
2022-11-11 18:17:48
976
原创 1704、判断字符串的两半是否相似
给你一个偶数长度的字符串 s。将其拆分成长度相同的两半,前一半为 a ,后一半为 b。两个字符串 相似 的前提是它们都含有相同数目的元音('a','e','i','o','u','A','E','I','O','U')。注意,s 可能同时含有大写和小写字母。如果 a 和 b 相似,返回 true;否则,返回 false。s = "book"truea = "bo" 且 b = "ok"。a 中有 1 个元音,b 也有 1 个元音。所以,a 和 b 相似。false。
2022-11-11 11:11:36
195
原创 C++静态成员(static)
由关键字static修饰类体中成员,称为类静态成员(static class member)。类的静态成员为其所有对象共享,不管有多少对象,静态成员只有一份存于公共内存中。静态数据成员被当作该类类型的全局对象。1、设计静态数据成员目的是信息共享和信息交流2、类的静态数据成员为所有类对象所共享,不属于某个具体的实例3、类的静态数据成员必须在类外定义,定义时不添加static关键字,不能在构造函数的初始化列表中创建。
2022-11-10 20:53:51
6250
原创 26、删除有序数组中的重复项
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2。当数组不为空时,最少可以有一个不同的项,即为nums[0],使得nums[j]=nums[0],count=1;
2022-11-10 17:59:53
110
原创 764、最大加号标志
在一个 n x n 的矩阵 grid 中,除了在数组 mines 中给出的元素为 0,其他每个元素都为 1。mines[i] = [xi, yi]表示 grid[xi][yi] == 0返回 grid 中包含 1 的最大的 轴对齐 加号标志的阶数。如果未找到加号标志,则返回 0。一个 k 阶由 1 组成的 “轴对称”加号标志 具有中心网格 grid[r][c] == 1 ,以及4个从中心向上、向下、向左、向右延伸,长度为 k-1,由 1 组成的臂。
2022-11-09 13:02:44
477
原创 1684、统计一致字符串的数目(暴力+哈希)
给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words。如果一个字符串的每一个字符都在 allowed 中,就称这个字符串是。请你返回 words 数组中的数目。2字符串 "aaab" 和 "baa" 都是一致字符串,因为它们只包含字符 'a' 和 'b'。7所有字符串都是一致的。4字符串 "cc","acd","ac" 和 "d" 是一致字符串。
2022-11-08 21:17:59
482
原创 C++指针基本概念及函数指针详解
指针就是一个地址。指针描述了数据在内存中的位置,标示了一个占据存储空间的实体,在这一段空间起始位置的相对距离值。在 C/C++语言中,指针一般被认为是指针变量,指针变量的内容存储的是其指向的对象的首地址,指向的对象可以是变量(指针变量也是变量),数组,函数等占据存储空间的实体。指针变量是存放一个内存地址的变量,不同于其他类型变量,它是专门用来存放内存地址的,也称为地址变量。定义指针变量的一般形式为:类型说明符*指针变量名。
2022-11-07 21:41:56
1079
原创 816、模糊坐标(枚举)
原始的坐标表示法不会存在多余的零,所以不会出现类似于"00", "0.0", "0.00", "1.0", "001", "00.01"或一些其他更小的数来表示坐标。此外,一个小数点前至少存在一个数,所以也不会出现“.1”形式的数字。我们有一些二维坐标,如 "(1, 3)" 或 "(2, 0.5)",然后我们移除所有逗号,小数点和空格,得到一个字符串S。最后返回的列表可以是任意顺序的。而且注意返回的两个数字中间(逗号之后)都有一个空格。0.0, 00, 0001 或 00.01 是不被允许的。
2022-11-07 20:05:04
128
原创 1678、设计Goal解析器(暴力+栈+replace)
请你设计一个可以解释字符串 command 的。command 由 "G"、"()" 和/或 "(al)" 按某种顺序组成。Goal 解析器会将 "G" 解释为字符串 "G"、"()" 解释为字符串 "o" ,"(al)" 解释为字符串 "al"。然后,按原顺序将经解释得到的字符串连接成一个字符串。给你字符串 command ,返回对 command 的解释结果。"Goal"Goal 解析器解释命令的步骤如下所示:G -> G() -> o(al) -> al。
2022-11-06 16:33:44
336
原创 1668、最大重复子字符串(暴力+KMP+strstr)
给你一个字符串 sequence ,如果字符串 word 连续重复 k 次形成的字符串是 sequence 的一个子字符串,那么单词 word 的k。单词 word 的是单词 word 在 sequence 中最大的重复值。如果 word 不是 sequence 的子串,那么重复值 k 为 0。给你一个字符串 sequence 和 word ,请你返回k。2"abab" 是 "ababc" 的子字符串。1。
2022-11-05 19:42:42
436
原创 754、到达终点数字
那么我们就要使前面走的某一步x反向,使num变为:num'=num-a=target=1+2+...-x+...+i。可以看到num'其实是在num的基础上减了2个x(先向左走x后又向右补上x),即a=2x=num-target,所以num-target必须为偶数;找到第一个使num=1+2+......+i>=target且num-target为偶数的 i。所以我们只需要找到第一个使num=1+2+...+i>target且num-target为偶数的k即为答案。第二次移动,从 1 到 -1。
2022-11-04 17:58:23
388
原创 1620、网络信号最好的坐标
1、题目所给的示例,容易让人误解信号强度最大的位置在这几个信号塔上,其实不然,只要符合要求,在坐标的任意位置上都有可能出现,题目中有给出范围,可采用穷举法;如果第 i 个塔能到达 (x, y) ,那么该塔在此处的信号为 ⌊qi / (1 + d)⌋ ,其中 d 是塔跟此坐标的距离。该题用暴力穷举法进行解答,遍历数组的所有坐标,根据题目要求,计算出各点的信号强度,通过比较确定出信号最强的点的坐标。坐标点 (cx, cy)。2、所有的塔都是正坐标,那么信号最好的位置也一定是正坐标,不用考虑负坐标的情况;
2022-11-02 18:47:07
343
原创 面试题13:机器人的运动范围(回溯法)
地上有m行n列的方格。一个机器人从坐标(0,0)的格子开始移动,它每次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。例如:当k为18时,机器人能够进入方格(35,37),因为3+5+3+7=18.但它不能进入方格(35,38),因为3+5+3+8=19.请问机器人能够到达多少个格子?
2022-11-01 21:02:45
238
原创 1662、检查两个字符串数组是否相等
给你两个字符串数组 word1 和 word2。如果两个数组表示的字符串相同,返回 true;否则,返回 false。数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。trueword1 表示的字符串为 "ab" + "c" -> "abc"word2 表示的字符串为 "a" + "bc" -> "abc"两个字符串相同,返回 truefalsetrue。
2022-11-01 19:01:00
506
原创 481、神奇字符串
s 的前几个元素是 s = "1221121221221121122……"。如果将 s 中连续的若干 1 和 2 进行分组,可以得到 "1 22 11 2 1 22 1 22 11 2 11 22 ......"。每组中 1 或者 2 的出现次数分别是 "1 2 2 1 1 2 1 2 2 1 2 2 ......"。上面的出现次数正是 s 自身。给你一个整数 n ,返回在神奇字符串 s 的前 n 个数字中 1 的数目。输入:n = 6输出:3。
2022-10-31 21:19:57
210
原创 C++友元函数
1、 友元函数不是类的成员函数,在函数体中访问对象的成员,必须用对象名加运算符"."加对象成员名。但友元函数可以访问类中的所有成员,一般函数只能访问类中的公有成员。2、友元函数不受类中的访问权限关键字限制,可以把它放在类的公有、私有、保护部分,但结果都一样。3、某类的友元函数的作用域并非该类作用域。如果该友元函数是另一类的成员函数,则其作用域为另一类的作用域,否则与一般函数相同。
2022-10-29 21:57:52
5418
原创 面试题12:矩阵中的路径(回溯法)
回溯法可以看成蛮力法的升级版,它从解决问题的每一步的所有可能选项里系统地选择出一个可行的解决方案。回溯法非常适合由多个步骤组成的问题,并且每个步骤都有多个选项。当我们在某一步选择了其中一个选项时,就进入下一步,然后又面临新的选项。我们就这样重复选择,直至到达最终状态。用回溯法解决的问题的所有选项可以形象地用树状结构表示。在某一步有n个可能的选项,那么该步骤可以看成是树状结构中的一个节点,每个选项看成树中节点连接线,经过这些连接线到达该节点的n个子节点。树的叶节点对应着终结状态。
2022-10-28 18:08:55
599
原创 915.分割数组
3、如果后续搜索的值都大于leftMax,则分割完毕;(注意:每次更新右侧最大值,不满足条件的情况下,更新leftMax);2、当碰到第一个大于leftMax的值时,记录sum(位置)和这个值,继续向后搜索;4、如果后续有值小于leftMax,则更新leftMax和sum,继续向后搜索;完成搜索后,返回sum的位置+1即可,[0,sum]就是最小的left数组。1、找到左侧的最大值,向后搜索只要数值小于leftMax的值,都是左数组;在完成这样的分组后返回 left 的长度。
2022-10-24 11:38:32
191
原创 1700、无法吃午餐的学生数量
给你两个整数数组 students 和 sandwiches ,其中 sandwiches[i] 是栈里面第 i 个三明治的类型(i = 0 是栈的顶部), students[j] 是初始队列里第 j 名学生对三明治的喜好(j = 0 是队列的最开始位置)。- 最前面的学生拿走最顶上的三明治,剩余学生队列为 students = [0,1,1],三明治栈为 sandwiches = [1,0,1]。如果队列最前面的学生喜欢栈顶的三明治,那么会拿走它并离开队列。
2022-10-19 23:47:34
136
原创 Linux信号基本概念
利用bash创建ps命令------execl的使用(结合fork)fork+exec()是Linux上创建新进程方式#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<assert.h>#include<sys/wait.h>int main(){ printf("main pid=%d,ppid=%d\n",getpid(),getppid(
2022-10-17 23:56:36
454
原创 Linux进程打开文件(先open再fork、先fork再open)
库函数调用与系统无关,不同的系统,调用库函数,库函数会调用不同的底层函数实现,因此可移植性好;系统调用是为了方便使用操作系统的接口,而库函数则是为了人们编程的方便;先创建一个文件file.txt,内容为abcdefg;inode节点:存放有关文件的属性信息;(了解文件偏移量不共享)
2022-10-17 19:34:29
640
原创 Linux进程替换(exec系列)
man execl看帮助手册//path:新替换的程序的路径名称//arg :传给新程序主函数的第一个参数,一般为程序的名字//arg 后面是剩余参数列表,参数个数可变,必须以空指针作为最后一个参数//在环境变量PATH指定的路径里面搜索;;//把参数都放在了一个数组中//系统调用//前五个是库函数,最后一个是系统调用,所以本质上上面5个都是通过第六个系统调用实现的.
2022-10-17 16:56:42
472
原创 Linux申请空间(malloc)
如果当前物理内存空间不够,看有没有虚拟空间,若有,观察虚拟内存+物理内存是否满足申请大小,否则不能成功。1、进程在执行的过程中,malloc申请空间,不使用时,没有free就会出现内存泄漏;如果进程结束了,那么所有向操作系统申请的内存都会被回放(释放);内核会给子进程分配和父进程一样的空间,父子进程都需要free。如果当前物理内存剩余空间够用,那么申请空间可以成功。4.父进程堆区申请的空间复制后,子进程也有一份。2、申请1G或者更大空间,到底能不能成功?申请空间——>物理内存剩余空间+虚拟内存。
2022-10-17 16:27:24
2071
原创 C++——const
{a=10;//error//对}{//const修饰的是什么?//指针所指向的内容//p1本身是指针变量,所指向的内容不能修改p1++;//指针所指向的内容p2++;//p1与p2相同a = 50;//error//a可以修改,但*p1不能修改//指针本身//const修饰p3本身*p3 = 50;//p3所指向的内容可以修改,p3不能修改//p3=&b//error,修改p3本身//p4本身和所指向内容都不能修改}
2022-10-15 23:34:49
463
原创 C++析构函数
即将s中字符串“pang”的首地址给了m_name,m_name该指针指向字符串常量,字符串并未存储进去,即m_name(name)将m_name指针指向name所指向的那个字符串常量的首地址,并没有开辟空间,不能修改。在栈上开辟的空间不需要释放(默认的析构函数不会释放堆上的空间,只会释放堆上的空间)构造函数——自动调用——构造函数——默认的构造函数(无参,无返回值)析构函数——释放对象——对象退出时——自动调用(程序员可以人为调用)一个合法对象——调用构造函数——开辟空间和赋合法值(初始化)
2022-10-15 22:44:40
1747
原创 Linux操作文件的底层系统调用
两个参数用于打开一个已经存在的文件;三个参数的用于新建一个文件,并设置访问权限;pathname:文件的路径和名称;flags:文件的打开方式;mode:文件的权限,如"0600";为int,称为文件描述符;(Linux上一切皆文件)O_WRONLY:只写打开;O_RDONLY:只读打开;O_RDWR:读写方式打开;O_CREAT:文件不存在则创建;O_APPEND:文件末尾追加;O_TRUNC:清空文件,重新写入;
2022-10-15 21:17:03
720
原创 Linux——僵死进程
如果父进程不调用wait/waitpid的话, 那么保留的那段信息就不会释放,其进程号会一定被占用,但是系统所能使用的进程号是有限的,如果产生了大量的僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程。当一个进程结束时,进程实体先被释放,因为PCB中的exit_code记录进程的退出码,只有当进程的退出码被父进程获取之后,进程的PCB才会被释放。父进程先于子进程结束,子进程就会被收养,"父进程"就会获取退出码;当子进程先于父进程结束,父进程没有获取子进程的退出码,此时子进程变成僵死进程。
2022-10-15 20:54:24
476
原创 1790、仅执行一次字符串交换能否使两个字符串相等(计数法、哈希法)
给你长度相等的两个字符串 s1 和 s2。一次字符串交换操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。如果对其中一个字符串执行最多一次字符串交换就可以使两个字符串相等,返回 true;否则,返回 false。true例如,交换 s2 中的第一个和最后一个字符可以得到 "bank"false一次字符串交换无法使两个字符串相等true两个字符串已经相等,所以不需要进行字符串交换false。
2022-10-11 18:03:11
502
原创 21、合并两个有序链表
在帮助 dummy 连接之后,还可以控制更小的 list1 或 list2 向后移动。3、判断 list1 和 list2 哪个更小,就把这个节点接到下一个。新链表是通过拼接给定的两个链表的所有节点组成的。2、使用dummy->next来保存需要返回的头节点。使用指向指针的指针 cur 用来存储更小的一边的指针。4、直到有一边为NULL ,即可将另一边剩余的都接上。1、先考虑list1和list2可能为空的情况。将两个升序链表合并为一个新的。
2022-10-10 17:50:21
289
原创 856.括号的分数(栈)
(2)如果栈顶不为0,则栈顶向下第一个0表示‘(’与此时遍历的‘)’组成括号且分数为栈顶到0之间所有数字之和的两倍,将栈顶到第一个0全部出栈并且分数入栈;(1)如果栈顶为0,则表示‘(’与此时遍历的‘)’组成最小括号“()”且分数为1,将栈顶出栈,1入栈;2、AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。3、(A) 得 2 * A 分,其中 A 是平衡括号字符串。遍历完全后栈内一定只剩下非0数,其总和为总分。1、如果遇到‘(’则0入栈;1、() 得 1 分。
2022-10-09 23:25:34
103
转载 20.有效的括号(栈)
遇到右括号时,若和栈顶的左括号与之对应就出栈。注意:当遍历到左括号时,将与之对应的右括号入栈,就只需要比较当前元素和栈顶元素是否相等即可。3、当遍历过程中遇到右括号时,栈顶元素与之不对应,则说明括号的类型没有对应上,return false。给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。2、当遍历过程中遇到右括号时栈为空,则说明右括号多余,return false。1、当遍历完字符串后栈不为空,则说明有多余的左括号,return false。
2022-10-08 19:29:03
166
转载 811.子域名访问计数(哈希)
顶级域名为 "com" ,二级域名为 "leetcode.com" ,最低一级为 "discuss.leetcode.com"。当访问域名 "discuss.leetcode.com" 时,同时也会隐式访问其父域名 "leetcode.com" 以及 "com"。按照前文描述,会访问 "google.mail.com" 900 次,"yahoo.com" 50 次,"intel.mail.com" 1 次,"wiki.org" 5 次。可以按任意顺序返回答案。
2022-10-05 19:35:01
206
原创 921.使括号有效的最少添加
例如,如果 s = "()))" ,你可以插入一个开始括号为 "(()))" 或结束括号为 "())))"。它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者。给定一个括号字符串 s ,移动N次,你就可以在字符串的任何位置插入一个括号。返回 为使结果字符串 s 有效而必须添加的最少括号数。它可以被写作 (A),其中 A 是有效字符串。它是一个空字符串,或者。
2022-10-04 20:18:11
145
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人