自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

转载 struct内存对齐

结构体内存对齐对齐原则在明白了为何要进行内存对齐之后,我们来分析结构体内的内存对齐,在进行具体的实例分析前,需要给出结构体内存对齐的两条基本原则。一、结构体各成员变量的内存空间的首地址必须是“对齐系数”和“变量实际长度”中较小者的整数倍。二、对于结构体来说,在其各个数据都对齐之后,结构体本身也需要对齐,即结构体占用的总大小应该为“对齐系数”和“最大数据长度”中较小值的整数倍。在给定了基本原则之后,我们通过一个例子来说明结构体的内存对齐,假定当前的处理器是 32 位的,对齐系数为4。在这里

2022-04-25 19:36:14 885

转载 C++创建对象时区分圆括号( )和大括号{ }

C++11的对象初始化的语法选择是不堪和混乱的。总的来说,初始值可以借助大括号'{ }',等号'=' ,圆括号'( )' :int x(0); // 初始值在圆括号内int y = 0; // 初始值在等号后面int z{0}; // 初始值在大括号内使用等号初始化经常会让C++初学者认为会进行一次赋值,但不是那样的,对于内置类型,例如int,初始化和赋值操作的差别是模糊的。但是对于用户定义的类,区分初始化和赋值操作是很重要的,因为这会导致不同的函数调用:Widg..

2022-04-08 01:01:22 1519

转载 c++ enum类型的使用

枚举数据类型是一种由程序员定义的数据类型,其合法值是与它们关联的一组命名整数常量。之所以被称为枚举类型,就是因为命名常量是作为数据类型定义的一部分而枚举或列出的,以下是枚举类型声明的示例:enum Roster {Tom, Sharon, Bill, Teresa, John};该语句将创建一个名为 Roster 的数据类型。因为单词 enum 是 C++ 关键字,所以它必须小写,值得注意的是,数据类型本身的名字是以大写字母开头的。虽然这并非必须,但是绝大多数程序员都会釆用首字母大写的形式。和

2022-04-08 00:31:05 260

转载 C++ 中using 的使用

#include <iostream>//第一处using namespace std;class ClassOne {public: int w;protected: int a;};class ClassTwo{public: //第二处 using ModuleType = ClassOne;};template <typename ClassType>class ClassThree : private Clas.

2022-04-08 00:03:39 798

转载 C++命名空间 namespace的作用和使用解析

一、 为什么需要命名空间(问题提出)命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。在 C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们。1、全局变量的作用域是整个程序,在同一作用域中不应有两个或多个同名的实体(enuty),包括变量、函数和类等。例:如果在文件中定义了两个类,在这两个类中可以有同名的...

2022-04-07 22:25:45 2317

原创 字符串:859.亲密字符串

题目:给定两个由小写字母构成的字符串A和B,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回true;否则返回 false 。交换字母的定义是取两个下标 i 和 j (下标从 0 开始),只要 i!=j 就交换 A[i] 和 A[j] 处的字符。例如,在 "abcd" 中交换下标 0 和下标 2 的元素可以生成 "cbad" 。示例 1:输入: A = "ab", B = "ba"输出: true解释: 你可以交换 A[0] = 'a' 和 A[1] = ...

2021-09-24 15:01:25 61

原创 每日一题:326.3的幂

给定一个整数,写一个函数来判断它是否是 3的幂次方。如果是,返回 true ;否则,返回 false 。整数 n 是 3 的幂次方需满足:存在整数 x 使得 n ==示例 1:输入:n = 27输出:true示例 2:输入:n = 0输出:false示例 3:输入:n = 9输出:true示例 4:输入:n = 45输出:false思路:(第一版)扩大除数,如果n是3的幂,那n可以整除所有(<n),所以除数由3每次递乘3,直到等于n退出循环,返回true。..

2021-09-24 14:00:46 60

原创 字符串:819.最常见的单词

题目:给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。题目保证至少有一个词不在禁用列表中,而且答案唯一。禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。示例:输入:paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."banned = ["hit"]输出: "ball"解释:"h..

2021-09-22 19:26:35 107

原创 字符串:434.字符串中的单词数

题目:统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。请注意,你可以假定字符串里不包括任何不可打印的字符。示例:输入: "Hello, my name is John"输出: 5解释: 这里的单词是指连续的不是空格的字符,所以 "Hello," 算作 1 个单词。思路:题比较简单,只要不属于空格都属于单词的内容。设置一个标记pre=1表示已经进入单词了,然后遇见空格即单词数加1,同时标记pre清0。然后遇见第一个不为空格但标记pre=0,即近入一个新单词即设置pre=1

2021-09-22 16:31:34 126

原创 字符串:67.二进制求和

题目:给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字1和0。示例1:输入: a = "11", b = "1"输出: "100"示例2:输入: a = "1010", b = "1011"输出: "10101"思路:刚开始想将字符串每个字符都转化为0或1,或设置一个字符串来存结果,但一想这有现成的为什么还要用额外的内存呢。于是就在较长的字符串上改,题目不难,只要把逻辑理清楚,仔细点就不会错。首先就是找到长的字符串,然后...

2021-09-21 22:16:32 162

原创 字符串:13.罗马数字转整数

题目:罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II...

2021-09-21 17:56:29 78

原创 每日一题:58.最后一个单词的长度

题目:给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1:输入:s = "Hello World"输出:5示例 2:输入:s = " fly me to the moon "输出:4示例 3:输入:s = "luffy is still joyboy"输出:6提示:1 <= s.length <= 104s 仅有英文字母和空格 ...

2021-09-21 14:13:24 89

原创 数组:1497.检查数组对是否可被k整除

题目:给你一个整数数组 arr 和一个整数 k ,其中数组长度是偶数,值为 n 。现在需要把数组恰好分成 n /2 对,以使每对数字的和都能够被 k 整除。如果存在这样的分法,请返回 True ;否则,返回 False 。示例 1:输入:arr = [1,2,3,4,5,10,6,7,8,9], k = 5输出:true解释:划分后的数字对为 (1,9),(2,8),(3,7),(4,6) 以及 (5,10) 。示例 2:输入:arr = [1,2,3,4,5,6], k =.

2021-09-19 17:18:10 114

原创 每日一题:650.只有两个键的键盘

题目:最初记事本上只有一个字符 'A' 。你每次可以对这个记事本进行两种操作:Copy All(复制全部):复制这个记事本中的所有字符(不允许仅复制部分字符)。Paste(粘贴):粘贴 上一次 复制的字符。给你一个数字n ,你需要使用最少的操作次数,在记事本上输出 恰好n个 'A' 。返回能够打印出n个 'A' 的最少操作次数。示例 1:输入:3输出:3解释:最初, 只有一个字符 'A'。第 1 步, 使用 Copy All 操作。第 2 步, 使用 Paste 操作...

2021-09-19 14:36:41 109

原创 数组:11.盛最多水的容器

题目:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0) 。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为49。示例 2:输入:h...

2021-09-18 22:02:04 60

原创 每日一题:292.Nim游戏

题目:你和你的朋友,两个人一起玩Nim 游戏:桌子上有一堆石头。你们轮流进行自己的回合,你作为先手。每一回合,轮到的人拿掉1 - 3 块石头。拿掉最后一块石头的人就是获胜者。假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。示例 1:输入:n = 4输出:false解释:如果堆中有 4 块石头,那么你永远不会赢得比赛; 因为无论你拿走 1 块、2 块 还是 3 块...

2021-09-18 18:18:41 887

原创 每日一题:162.寻找峰值

题目:峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设nums[-1] = nums[n] = -∞ 。你必须实现时间复杂度为 O(log n) 的算法来解决此问题。示例 1:输入:nums = [1,2,3,1]输出:2解释:3 是峰值元素,你的函数应该返回其索引 2。示例2:输入:nums = [1,2,1,3,5,6,4]输出:1 或 ...

2021-09-16 10:15:07 104

原创 数组:1128.等价多米诺骨牌对的数量

题目:给你一个由一些多米诺骨牌组成的列表dominoes。如果其中某一张多米诺骨牌可以通过旋转 0度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的。形式上,dominoes[i] = [a, b]和dominoes[j] = [c, d]等价的前提是a==c且b==d,或是a==d 且b==c。在0 <= i < j < dominoes.length的前提下,找出满足dominoes[i] 和dominoes[j]等价的骨牌对...

2021-09-15 19:31:26 74

原创 每日一题:447.回旋镖的数量

题目:给定平面上n 对 互不相同 的点points ,其中 points[i] = [xi, yi] 。回旋镖 是由点(i, j, k) 表示的元组 ,其中i和j之间的距离和i和k之间的距离相等(需要考虑元组的顺序)。返回平面上所有回旋镖的数量。示例 1:输入:points = [[0,0],[1,0],[2,0]]输出:2解释:两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]示例 2:输入:points = [[...

2021-09-14 14:40:13 100

原创 数组:1089.复写零

题目:给你一个长度固定的整数数组arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。注意:请不要在超过该数组长度的位置写入元素。要求:请对输入的数组就地进行上述修改,不要从函数返回任何东西。示例 1:输入:[1,0,2,3,0,4,5,0]输出:null解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]示例 2:输入:[1,2,3]输出:null解释:调用函数后,输入的数组将被修改为:[1,2,3]思路:借助栈,将arr数...

2021-09-13 21:37:48 97

原创 模板全特化和偏特化

模板特化就是告诉编译器我这有更好的实现,走我这边,能更快的执行。类模板特化分为全特化和偏特化,全特化就是对所有的模板类型给一个限定,偏特化只限定一部分,可分为个数偏,范围偏具体如下代码://模板类 tempalte<class T1, class T2>class Person{ public: void printMem(){ cout<<m_A<<endl; cout<<m_B<<endl; }

2021-09-12 22:00:03 454

原创 类模板,函数(成员函数)模板

具体定义使用如下代码:#include<iostream>using namespace std;//模板函数template<class T>void myPrint(T& a) { cout << a << endl;}//模板类template<class T1>class Number{public: //构造函数模板 template<class T3> Number(T3

2021-09-12 21:14:35 280

原创 数组:989.数字形式的整数加法

题目:对于非负整数X而言,X的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果X = 1231,那么其数组形式为[1,2,3,1]。给定非负整数 X 的数组形式A,返回整数X+K的数组形式。示例 1:输入:A = [1,2,0,0], K = 34输出:[1,2,3,4]解释:1200 + 34 = 1234示例 2:输入:A = [2,7,4], K = 181输出:[4,5,5]解释:274 + 181 = 455示例 3:输入:A = [2,...

2021-09-12 20:02:21 93

原创 数组:941.有效的山脉数组

题目:给定一个整数数组 arr,如果它是有效的山脉数组就返回true,否则返回 false。让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组:arr.length >= 3在0 < i< arr.length - 1条件下,存在i使得: arr[0] < arr[1] < ... arr[i-1] < arr[i] arr[i] > arr[i+1] &gt...

2021-09-12 13:37:27 55

转载 每日一题:600.不含连续1的非负整数

题目:给定一个正整数 n,找出小于或等于 n 的非负整数中,其二进制表示不包含连续的1的个数。示例 1:输入: 5输出: 5解释:下面是带有相应二进制表示的非负整数<= 5:0 : 01 : 12 : 103 : 114 : 1005 : 101其中,只有整数3违反规则(有两个连续的1),其他5个满足规则。说明: 1 <= n <= 10^9思路:(动态规划)设一个数组:用f(i)表示为长度为i不含连续1的二进制数(范围i个0~~i个1)的个...

2021-09-12 13:22:35 178

原创 每日一题:1894.找到需要补充粉笔的学生编号

题目:一个班级里有n个学生,编号为 0到 n - 1。每个学生会依次回答问题,编号为 0的学生先回答,然后是编号为 1的学生,以此类推,直到编号为 n - 1的学生,然后老师会重复这个过程,重新从编号为 0的学生开始回答问题。给你一个长度为 n且下标从 0开始的整数数组chalk和一个整数k。一开始粉笔盒里总共有k支粉笔。当编号为i的学生回答问题时,他会消耗 chalk[i]支粉笔。如果剩余粉笔数量 严格小于chalk[i],那么学生 i需要 补充粉笔。...

2021-09-10 22:18:02 79

原创 数组:914.卡牌分组

题目:给定一副牌,每张牌上都写着一个整数。此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:每组都有X张牌。组内所有的牌上都写着相同的整数。仅当你可选的 X >= 2 时返回true。示例 1:输入:[1,2,3,4,4,3,2,1]输出:true解释:可行的分组是 [1,1],[2,2],[3,3],[4,4]示例 2:输入:[1,1,1,2,2,2,3,3]输出:false解释:没有满足要求的分组。示例 3:输入:[1...

2021-09-10 19:39:30 72

原创 c++:转换函数

1.标准数据之间会进行隐式类型安全转换,规则如下:在这里主要探讨c++中类类型与普通类型的转换:1.类类型转换普通类型class Fraction{public: Fraction(int num,int den=1); ~Fraction(); //转换函数 /* 转换函数语法规则: operator Type() {      Type ret ;      ........      return ret;    }.

2021-09-09 20:10:55 299

原创 数组:888.公平的糖果交换

题目:爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 根糖果棒的大小,B[j] 是鲍勃拥有的第 j 根糖果棒的大小。因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1]是 Bob 必须交换的糖果棒的大小。如果有多个答案,你可以返回其中任何一个。保证答案存在。示例 1:输入:A = [1,1], B .

2021-09-09 14:49:19 35

原创 数组:849.到最近的人的最大距离

题目:给你一个数组seats 表示一排座位,其中 seats[i] = 1 代表有人坐在第 i 个座位上,seats[i] = 0 代表座位 i 上是空的(下标从 0 开始)。至少有一个空座位,且至少有一人已经坐在座位上。亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。返回他到离他最近的人的最大距离。示例 1:输入:seats = [1,0,0,0,1,0,1]输出:2解释:如果亚历克斯坐在第二个空位(seats[2])上,他到离他最近的人的距离为 2 .

2021-09-08 15:35:48 52

原创 数组:840.矩阵的幻方

题目:3 x 3 的幻方是一个填充有从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。给定一个由整数组成的 grid,其中有多少个 3 × 3 的 “幻方” 子矩阵?(每个子矩阵都是连续的)示例:输入: [[4,3,8,4], [9,5,1,9], [2,7,6,2]]输出: 1解释:下面的子矩阵是一个 3 x 3 的幻方:438951276而这一个不是:384519762总的来说,在本示例所给...

2021-09-07 21:53:17 158

原创 每日一题:1221.分割平衡字符串

题目:在一个 平衡字符串 中,'L' 和 'R' 字符的数量是相同的。给你一个平衡字符串s,请你将它分割成尽可能多的平衡字符串。注意:分割得到的每个字符串都必须是平衡字符串。返回可以通过分割得到的平衡字符串的 最大数量 。示例 1:输入:s = "RLRRLLRLRL"输出:4解释:s 可以分割为 "RL"、"RRLL"、"RL"、"RL" ,每个子字符串中都包含相同数量的 'L' 和 'R' 。示例 2:输入:s = "RLLLLRRRLR"输出:3解释:s 可以分.

2021-09-07 14:25:07 85

原创 数组:830.较大分组位置

题目:在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。例如,在字符串 s = "abbxxxxzyy"中,就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。分组可以用区间 [start, end] 表示,其中 start 和 end 分别表示该分组的起始和终止位置的下标。上例中的 "xxxx" 分组用区间表示为 [3,6] 。我们称所有包含大于或等于三个连续字符的分组为 较大分组 。找到每一个 较大分组 的区间,按起始位置下.

2021-09-06 21:25:36 83

原创 数组:747.至少是其他数字两倍的最大数

给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。示例 1:输入:nums = [3,6,1,0]输出:1解释:6 是最大的整数,对于数组中的其他整数,6 大于数组中其他元素的两倍。6 的下标是 1 ,所以返回 1 。示例 2:输入:nums = [1,2,3,4]输出:-1解释:4 没有超过 3 的两倍大,所以返回 -1 。示例 3:

2021-09-06 13:42:47 94

原创 每日一题:704.二分查找

题目:给定一个n个元素有序的(升序)整型数组nums 和一个目标值target ,写一个函数搜索nums中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1(这题感觉是编程...

2021-09-06 13:07:58 71

原创 数组:724.寻找数组的中心下标

题目:给你一个整数数组nums ,请计算数组的 中心下标 。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。示例 1:输入:nums = [1, 7, 3, 6, 5, 6]输出:3解释:中心下标是 3 。左侧数之和 sum .

2021-09-05 21:08:42 126

原创 每日一题:470.用Rand7()实现Rand10()

已有方法rand7可生成 1 到 7 范围内的均匀随机整数,试写一个方法rand10生成 1 到 10 范围内的均匀随机整数。不要使用系统的Math.random()方法。示例 1:输入: 1输出: [7]示例 2:输入: 2输出: [8,4]示例 3:输入: 3输出: [8,1,10]提示:rand7已定义。传入参数:n表示rand10的调用次数。思路:(这题刚一看什么鬼,再一看有点思路,再深入要每个数出现概率相同,又不会了,最后看了评论...

2021-09-05 15:20:17 107

原创 数组:717.1比特与2比特

(写题解只是为了以后方便复习,记录自己的不足)题目:有两种特殊字符。第一种字符可以用一比特0来表示。第二种字符可以用两比特(10或11)来表示。现给一个由若干比特组成的字符串。问最后一个字符是否必定为一个一比特字符。给定的字符串总是由0结束。示例1:输入:bits = [1, 0, 0]输出: True解释:唯一的编码方式是一个两比特字符和一个一比特字符。所以最后一个字符是一比特字符。示例2:输入:bits = [1, 1, 1, 0]输出: False...

2021-09-04 21:07:11 46

原创 数组:697.数组的度

(写题解只是为了自己以后复习,无其他想法)题目:给定一个非空且只包含非负数的整数数组nums,数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是在 nums 中找到与nums拥有相同大小的度的最短连续子数组,返回其长度。示例 1:输入:[1, 2, 2, 3, 1]输出:2解释:输入数组的度是2,因为元素1和2的出现频数最大,均为2.连续子数组里面拥有相同度的有如下所示:[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [...

2021-09-03 21:34:03 60

原创 数组:674.最长连续递增序列

题目:给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。示例 1:输入:nums = [1,3,5,4,7]输出:3解释:最长连续递增序列是 [1,3,5]

2021-09-02 20:28:13 115

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除