- 博客(125)
- 问答 (4)
- 收藏
- 关注
原创 【iOS】自定义UITextView富文本超链接的颜色
默认情况下,可以直接通过设置NSAttributedString的颜色属性来修改NSAttributedString不同区域的颜色,但是在 UITextView 中,默认情况下超链接的颜色是系统设置的,无法直接通过NSAttributedString 来修改,默认就是蓝色的,如果想要修改默认的颜色,可以通过自定义UITextView,修改linkTextAttributes的属性来完成。
2024-09-13 18:11:52 612
原创 C++读取txt文件到数组,元素个数未知(判断文件结束)
void GetFile(){ ifstream infile; //方案1:利用eof判断是否到文件末尾 int item1; infile.open("demo.txt"); cout << "方案一的结果如下:" << endl; vector<int> res1; while (!infile.eof()) { infile >> item1; res1.push_back(item1); } infile.close
2021-12-16 12:09:50 1975
原创 C++多行输入且行数未知
#include<iostream>using namespace std;#include<vector>#include<string>#include<sstream>/* 如何输入多行数据,形如: a 12 13 b 14 15 c 16 17 ... 输入的行数未知*/void fun(){ vector<string> ar; vector<string> name; vector<
2021-09-20 19:42:16 1676 1
原创 返回数组指针
由于数组不能被拷贝,所以函数不能返回数组。不过,函数可以返回数组的指针或引用。虽然从语法上来说,想要定义一个返回数组的指针或引用的函数比较麻烦,但是任然有一些方法可以来简化这个操作,其中最简单方法就是前面谈到了类型别名:typedef int arrT[10]; //arrT是一个类型别名,表示的类型是含有10个int的数组using arrT = int[10]; //同上arrT* fun(int i); //返回一个指向含有10个int数组的指针 其中arrT是含有10个整数的
2021-05-27 14:41:01 1222
原创 C++图的基本用法
PS.更多数据结构知识详见:八大数据结构图的数据结构const int MAXVEX = 100; //最大的顶点数typedef char VertexType; //定点的类型typedef int EdgeType; //边的权值struct Graph{ VertexType vexs[MAXVEX]; //顶点表 EdgeType arc[MAXVEX][MAXVEX]; //邻接矩阵 int numVertexes, numEdges; //当前的边和顶点数
2021-05-19 16:34:10 550
原创 C++二叉树的基本用法
PS.更多数据结构知识详见:八大数据结构C++二叉树的数据结构struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int val) :val(val), left(nullptr), right(nullptr) {}};构建二叉树//输入序列:A B D G # # H # # # C E # I # # F # #//构建二叉树void CreateBinaryTree(TreeNode*
2021-05-18 10:53:10 300
原创 C++队列的基本用法
PS.更多数据结构知识详见:八大数据结构C++队列的用法队列的数据结构ADT 队列(Queue)Data 同线性表。具有相同的数据类型,相邻的元素存在前驱和后继关系Opreation InitQueue(): 初始化一个空的队列 DestoryQueue(): 销毁队列 ClearQueue(): 清空队列元素 QueueEmpty(): 判断队列是否为空,是则返回true,否则返回false GetHead(): 获取队首元素 EnQueue(e):
2021-05-17 21:09:31 2226 2
原创 C++栈的基本用法
PS.更多数据结构知识详见:八大数据结构栈的用法栈的数据结构ADT 栈Data 和线性表相同,元素具有相同的数据类型,相邻元素具有前驱和后继关系Opreation InitStack(): //初始化,建立一个空栈 DestoryStack(): //若栈存在,则销毁栈 CleraStack(): //将栈的元素清空 StackEMpty(): //判断栈是否为空,为空返回true,否则返回false GetTop(): //栈不为空则,返回栈顶元素,否则返回-1 Pu
2021-05-17 09:39:35 1778
原创 C++基础知识合集
复合类型复合类型是指基于其他类型定义的变量,通常有引用和指针;引用:简单的理解就是为一个对象起别名,就相当于小时候经常给同学起外号一样,是为一个已经存在的人起外号,那么也就是说引用变量必须初始化,且初始化为已经存在的对象。引用的使用方法是 :& + 引用名 = 被引用的对象比如:int a = 2;int &b = a; //合法int &c = 2; //非法,2是右值,引用这里指的是左值对象,右值引用前面说过,是 &&d = 2;int
2021-05-13 21:56:14 667 1
原创 C++链表的基本用法
PS.更多数据结构知识详见:八大数据结构链表的用法1.链表的数据结构//节点的定义struct MyLinkList{ int val; MyLinkList* next; MyLinkList(int val = 0, MyLinkList* next = nullptr) :val(val),next(next){};};2.构建一个链表void CreatLinkList(MyLinkList* head){ cout << "请输入链表的节点值,输入0则链
2021-05-13 20:23:13 916
原创 函数重载和运算符重载
函数重载和运算符重载C++允许在同一个作用域内中的某个函数或者运算符指定多个定义,分别有函数重载和运算符重载,重载就是函数和方法具有相同的名称但是它们的参数列表不同,调用重载函数或者运算符时会根据参数列表进行匹配找到最适合的定义。函数重载同名函数参数列表不同:1.参数的个数不同;2.参数的类型不同;特别注意:不能根据函数的返回值不同来区分不同的重载函数class PrintData {public: void print(int i){ cout << "整型数为 :
2021-05-13 17:55:26 1367
原创 C++数组的用法
数组的申明静态数组数组大小必须是常量,常量的形式可以是数值,const关键字修饰的变量,或者是宏定义#define LEN 10//一维数组int arr1[10]; const int SIZE = 10;int arr2[SIZE]; int arr3[LEN];//二维数组int arr4[3][4];int arr5[SIZE][LEN];动态数组动态数组的大小不需要申明时就指定大小,可以通过动态内存分配//一维数组int len = 10;int* ptr
2021-05-13 17:26:14 1302
原创 八大数据结构
数据结构的分类数据结构是指相互之间存在一种或者多种特定关系的数据元素的集合,常见的数据结构有:数组、栈、链表、队列、树、堆、图以及散列表。1.数组数组就是在内存中连续存储多个元素的结构,同时这么存放元素的物理地址也是连续的,数组中的元素可以通过数组下标进行访问。下标从0开始,最大可访问的下标为数组大小减一。优点:随机查询元素效率高按下标遍历数组方便缺点:数组大小在定义的时候就要指定,无法扩容数组只能存储一种类型的数据增加和删除元素效率低,需要移动元素适应场景:频繁查询,对
2021-05-12 19:32:23 489
原创 函数的返回值(值,指针,引用作为函数的返回值)
函数的返回值无返回值的函数//没有返回值的return语句只能用于返回值类型为void的函数,无返回值的函数//最后不一定非要有return语句,函数的最后一句会隐式地执行returnvoid printArray(){ for (int i = 0; i < 10; i++) cout << i << " "; //return;}//有返回值的函数//return语句的第二种形式提供看函数的结果,只要函数的返回值类型不是void//则该返
2021-04-14 20:02:40 458
原创 函数的参数传递(值传递,引用传递,指针传递)
函数的参数传递形式传递值,传递时形参将会生成新的变量初始化为实参的值,形参的改变不会影响实参传递引用,相当于形参是实参的别名,形参的改变会导致实参的改变传递指针,传递时形参将会生成新的指针变量初始化为实参的值,形参指向的地址改变不会影响实参,但是在不改变指向的时候形参指向的值改变会导致实参指向值的改变函数的值传递void swap1(int a, int b){ int c = a; a = b; b = c;}函数的引用传递void swap2(int& a, int
2021-04-14 09:04:45 424 1
原创 一维数组作为函数参数的使用
一维数组作为函数参数数组有两个特性1.不允许拷贝数组2.使用数组时会将其转换成指针由于不能拷贝数组,那么我们不能按照值传递的方式使用数组,又因为数组在使用的时候会转换成指针,所以可以通过指针传递使用数组,注意,指针是以值传递的方式到函数中,也就是说,函数中的指针其实是实际数组首地址的副本,它们都可以访问数组的元素,但是函数中的指针并不能改变实际数组首地址的指向,只能改变数组中的元素使用标记指定数组的长度//char* 数组使用标记\0标记数组的末尾void printChar(char*
2021-04-13 10:50:25 1462
原创 求完全二叉树中的最近公共祖先(数组形式存放节点)
完全二叉树的最近公共祖先题目描述完全二叉树采用数组存放,在数组中找到v1和v2的最近公共祖先思路将数组的索引当做二叉树的节点,当前节点为root,其左子树为left = root * 2 + 1;右子树为 right = left + 1;,递归三部曲返回值和参数:输入当前的数组以及起始点root = 0,两个节点值v1和v2,输出v1和v2的最近公共祖先单层递归逻辑:当前节点等于v1或者v2时返回当前节点,当前节点不为v1或者v2,遍历它的左子树和右子树,如果左子树返回-1,说明v1和v2
2021-03-29 21:23:19 1512
原创 拆分数字(数论 + dp)
数学方法2+2+2 = 3+3 但是 2 * 2 * 2 < 3 * 3的那么所有的数应该尽可能的分成3的和然后剩下的分成2,如果只剩下1,就少用一个3变成4,如果剩下一个2那就将3的累积乘以2,剩下0就直接返回3的累积就可以了class Solution {public: int integerBreak(int n) { if(n == 2) return 1; if(n == 3) return 2;
2021-03-11 16:31:44 421
原创 不同路径(无障碍)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:图片输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向右 -> 向下向右 -> 向下 -> 向右向下 -> 向右 -&g
2021-03-11 16:31:30 138
原创 不同路径(有障碍)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。示例 1:输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。从左上角到右下角一共有 2 条不同的路径:
2021-03-11 16:31:13 489
原创 使用最小花费爬楼梯
746. 使用最小花费爬楼梯数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。示例 1:输入:cost = [10, 15, 20]输出:15解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。示例 2:
2021-03-11 16:30:55 158
原创 爬楼梯问题(递归 + dp)
70. 爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入:2输出:2解释:有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入:3输出:3解释:有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶递归三部曲参数和返回值:输入楼层n 返回有多少中爬楼梯的方法单层递归逻辑:当前楼层的爬楼方法数 = 前一阶 +
2021-03-11 16:30:37 335
原创 斐波那契数列(递归 + dp)
509. 斐波那契数斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你n ,请计算 F(n) 。示例 1:输入:2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1示例 2:输入:3输出:2解释:F(3) = F(2) + F(1) = 1 + 1 = 2示
2021-03-11 16:30:20 602
原创 单调递增的数字
738. 单调递增的数字题目描述给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)示例 1:输入: N = 10输出: 9示例 2:输入: N = 1234输出: 1234示例 3:输入: N = 332输出: 299说明: N 是在 [0, 10^9] 范围内的一个整数。思路首先不大于当前整数的最大的整数就是它本身,如
2021-03-11 10:33:43 194
原创 合并区间
56. 合并区间题目描述给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: intervals = [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: intervals = [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。注意:输入类型已于2019年4月15日更改。请重
2021-03-11 10:33:22 134
原创 用最少数量的箭引爆气球
452.用最少数量的箭引爆气球在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。弓箭一旦被射出之后,可以无限地前进。我们想找到
2021-03-11 10:32:59 135
原创 根据身高重建队列
406. 根据身高重建队列假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。示例 1:输入:people = [
2021-03-10 19:24:00 119
原创 柠檬水找零
860.柠檬水找零题目链接在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。示例 1:输入:[5,5,5,10,20]输出:true解释:前 3 位顾客那里,我们按顺序收取 3 张
2021-03-10 19:23:41 114
原创 分发糖果
leetcode 135. 分发糖果题目链接老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入: [1,0,2]输出: 5解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。示例 2:输入: [1,2,2]输出: 4解释: 你可以分别给这三个孩子分发
2021-03-10 09:27:03 96
原创 加油站
leetcode在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。示例 1:输入:gas = [1,2,3,4,5]cost = [3,4,5,
2021-03-10 09:26:32 129
原创 K次取反后最大化的数组和
leetcode 1005.K次取反后最大化的数组和题目链接给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)以这种方式修改数组后,返回数组可能的最大和。示例 1:输入:A = [4,2,3], K = 1输出:5解释:选择索引 (1,) ,然后 A 变为 [4,-2,3]。示例 2:输入:A = [3,-1,0,2], K = 3输出:6解释:选择索引 (1,
2021-03-10 09:25:58 135
原创 跳跃游戏II(最少的可达跳跃次数)
leetcode 45.跳跃游戏II给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。说明:假设你总是可以到达数组的最后一个位置。贪心思路首先题目给出的数组是一定可达的,那么最多跳数就是size - 1;要想跳
2021-03-10 09:25:39 894
原创 跳跃游戏(贪心和动态规划)
leetcode 55. 跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最
2021-03-10 09:24:57 160
原创 买卖股票的最佳时机
leetcode 122. 买卖股票的最佳时机 II给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。随后,在第 4 天(股票价格
2021-03-10 09:24:39 169
原创 最大子序和
leetcode 53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。思路遍历数组依次累加,当当前和小于等于0,说明前面的数的和对后续数的和没有帮助,所以从这个时候和要从后续的数开始重新累计,每次更新当前的最大和,遍历完数组即可int maxSubArray(vector<int>&a
2021-03-10 09:24:09 89
原创 利用贪心思路求摆动序列的长度
leetcode 376. 摆动序列题目链接如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通
2021-03-10 09:23:34 111
原创 解数独
leetcode 37. 解数独题目链接编写一个程序,通过填充空格来解决数独问题。一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。一个数独。答案被标成红色。提示:给定的数独序列只包含数字 1-9 和字符 ‘.’ 。你可以假设给定的数独只有唯一解。给定数独永远是 9x9 形式的。递归三部曲1.参数和返回值:输入一个二位数组表示数独,返回
2021-03-09 10:45:07 383
原创 N皇后问题
leetcode 51. N 皇后给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例: 输入: 4输出: [[".Q…", // 解法 1“…Q”,“Q…”,“…Q.”],["…Q.", // 解法 2“Q…”,“…Q”,“.Q…”]]解释: 4 皇后问题存在两个不同的解法递归三部曲参数和返回值:全局变量保存result保存所有的可能结果,输入当前层数和
2021-03-09 10:44:49 120
原创 全排列(有重复数)
leetcode 47. 全排列 II题目链接给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。示例 1:输入:nums = [1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]示例 2:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]提示:1 <= nums.length <= 8-10 <= nums[i] <= 10
2021-03-09 10:44:21 1044
空空如也
freeimage 想要反转图片怎么成功不了?
2021-03-13
对话框自定义消息在不同类中传递
2017-07-09
为什么我在A类传消息给B,运行后B的对话框编辑控件得不到答案
2017-07-09
B对话框的句柄到A中,然后在A中传消息给B,结果显示在B对话框的编辑控件里显示不了
2017-07-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人