Leetcode
Leetcode算法题
一只老风铃
欣于所遇,暂得于己,快然自足。
展开
-
正则表达式匹配:进阶版
匹配问题原创 2022-07-30 13:14:03 · 388 阅读 · 2 评论 -
任务调度器
最大相同任务数思想原创 2022-07-25 16:27:09 · 1000 阅读 · 0 评论 -
状态DP:二进制状态与图的搜索
问题引入描述城市里有n个郊区和m条无向道路,第i条道路连接郊区Ai和Bi,路费是Ci。决定去其中的R个郊区,需要找到一条路线使得他们的花费最少,假设他们制定的旅游路线为V1, V2 ,V3 … VR,那么他们的总花费为从V1到V2的花费加上V2到V3的花费依次类推输入描述:第一行三个整数n, m, R(2 ≤ n ≤ 200, 1 ≤ m ≤ 5000, 2 ≤ R ≤ min(n, 15))。第二行R个整数表示需要去玩耍的郊区编号。以下m行每行Ai, Bi, Ci(1 ≤ Ai, Bi原创 2021-12-11 15:54:39 · 447 阅读 · 0 评论 -
树形DP:配对染色
问题引入描述给定一棵树,为每个顶点染成红色或蓝色。要求:每个红点周围有且仅有一个红点,每个蓝点周围有且仅有一个蓝点。“周围”的定义:某点周围的点指通过邻边直接连接的点。所谓树,即没有自环、重边和回路的无向连通图。输入描述:第一行一个正整数 n,代表树的顶点个数.。接下来的 n-1 行,每行两个正整数 u 和 v,代表点 u 和点 v 有一条边连接。保证输入的一定是一棵合法的树。输出描述:如果可以达成染色的要求,请输出一个长度为 n 的字符串,第 i个字符代表第 i个顶原创 2021-12-09 22:25:17 · 1659 阅读 · 0 评论 -
树形DP:树的最大独立集
最大独立集树的最大独立集,即树中最多的不相邻的点的集合问题引入描述Cwbc和XHRlyb生活在 s 市,这天他们打算一起出去旅游。旅行地图上有 n 个城市,它们之间通过 n-1 条道路联通。Cwbc和XHRlyb第一天会在 s 市住宿,并游览与它距离不超过 1 的所有城市,之后的每天会选择一个城市住宿,然后游览与它距离不超过 1 的所有城市。他们不想住在一个已经浏览过的城市,又想尽可能多的延长旅行时间。XHRlyb想知道她与Cwbc最多能度过多少天的时光?输入描述:第一行,两原创 2021-12-09 00:14:28 · 617 阅读 · 0 评论 -
取余dp:配整
描述一个数组,取一些数使得取的数之和尽可能大,但要求这个和必须是 的倍数。输入描述:第一行输入两个正整数 n 和 k第二行输入 n 个正整数输出描述:如果没有合法方案,输出 -1。否则输出最大的和。示例1输入:5 54 8 2 9 1输出:20说明:取后四个数即可思路问题要求在一个数组中,选取一定数字组配成能够被k整除最大的和,若采取基本做法,那么需要计算每个数字是否加入到Sum中,并求和,复杂度为指数级别采取动态规划dp[n][i]=k 表示前原创 2021-12-07 22:29:54 · 1151 阅读 · 0 评论 -
二维差分-记录边缘变化
描述给你一个n行m列的矩阵,下标从1开始。接下来有q次操作,每次操作输入5个参数x1, y1, x2, y2, k表示把以(x1, y1)为左上角,(x2,y2)为右下角的子矩阵的每个元素都加上k,请输出操作后的矩阵。输入描述:第一行包含三个整数n,m,q$.接下来n行,每行m个整数,代表矩阵的元素接下来q行,每行5个整数x1, y1, x2, y2, k,分别代表这次操作的参数1≤n,m≤10001≤q≤10n1≤x1≤x2≤nm1≤y1≤y2≤m输出描述:输出n行,原创 2021-12-07 20:13:04 · 653 阅读 · 0 评论 -
高维dp-合并回文串
合并回文串问题描述输入两个字符串A和B,合并成一个串C,属于A和B的字符在C中顺序保持不变。如"abc"和"xyz"可以被组合成"axbycz"或"abxcyz"等。我定义字符串的价值为其最长回文子串的长度(回文串表示从正反两边看完全一致的字符串,如"aba"和"xyyx")。需要求出所有可能的C中价值最大的字符串,输出这个最大价值即可输入描述:第一行一个整数T(T ≤ 50)。 接下来2T行,每两行两个字符串分别代表A,B(|A|,|B| ≤ 50),A,B的字符集为全体小写字母。原创 2021-12-05 22:23:55 · 823 阅读 · 0 评论 -
LCA:路径积
LCA算法LCA即最近公共祖先,其通常的解决方法可以采取递归实现递归:采取后序遍历的方式,当第一个这样的父节点出现:即访问了那两个节点,那么该父节点即为所求具体可以采取count记录访问过的目标节点数目另外如果有多组这样的查询,可以从根节点开始,遍历一次构建Depth深度数组以及Parent回溯映射那么对于任意两个节点,先将深度Depth较大的那个向上回溯m=parent[m] =>直到同一高度,然后两个点一起回溯=》直到重合即为最近父节点路径积问题描述给定一棵原创 2021-07-21 11:24:08 · 229 阅读 · 0 评论 -
DP:最小调整次数
描述给出两个数列,求使第一个数列严格降序,第二个数列严格升序的最少交换次数若无法交换成严格有序,返回“-1”示例1输入:[5,4,3,2,1],[1,2,3,4,5]返回值:0说明:排列已经满足要求,不需要交换。示例2输入:[1,2,3,4,5],[5,4,3,2,1]返回值:4示例3输入:[3,2,1],[1,3,3]返回值:-1说明:不能满足要求,返回 -1。求解思路问题求解上下两个数组最少交换次数,采取动态规划的思路,即:dp1[i]=原创 2021-07-20 19:03:25 · 1472 阅读 · 0 评论 -
n皇后简洁做法
递归解决搜索问题描述已知正整数n,即在一个nxn的棋盘上放置n个棋子,使每行每列和每条对角线上都只有一个棋子,返回有多少种摆法方法。保证n小于等于15。测试样例:1返回:1求解思路n皇后问题是典型的搜索问题,但朴素的遍历方式复杂度过大:具体的优化思路:每行填充一个元素从第一行开始,每次新的第Index行,有N个可选填充位置分别研究每个填充位置(index,i),符合同一列不重复:(即第i列之前所有行不存在元素,每一行只填充一个,因此不需要考虑行重复)针对对角线重复判断原创 2021-07-09 16:19:04 · 193 阅读 · 0 评论 -
多维最长递增子序列
最长递增子序列一般采取动态规划的思路求解,常见的有两种:①:dp[i]表示以vec[i]结尾的最长递增子序列长度②:dp[len]=k表示长度为len的最长递增子序列末尾最小为k多维最长递增子序列描述已知三个int数组w,l,h,分别表示每个箱子宽、长和高,同时给定箱子的数目n。请设计算法,将箱子都堆起来(箱子不能反转),且上面箱子的宽度和长度必须小于下面的箱子。返回值为能够堆出的最高的高度。要求n小于等于500。测试样例:[1,1,1],[1,1,1],[1,1,1]返回:1原创 2021-07-07 13:53:01 · 176 阅读 · 0 评论 -
最小调整有序
问题描述描述给定一个int整数数组A及其大小n,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,即找出符合条件的最短序列。请返回一个二元组,元组的两个元素分别代表所求序列的起点和终点。(原序列位置从0开始标号,若原序列有序,返回[0,0])。要求A中元素均为正整数。测试样例:[1,4,6,5,9,10],6返回:[2,3]O(Nlog(N))级别做法先将原数组排序得到排序数组,依次寻找两个端点,即原数组左边起第一个没有原创 2021-06-24 10:13:34 · 170 阅读 · 0 评论 -
单调栈+辅助栈:下一个较大元素的最小值
单调栈一个保持栈中元素有序的结构,可用于寻找元素下一个(最近)的较大值:若新来的元素比栈顶更小,那么不断弹出栈顶,以保持最终有序描述给定一个int数组A及其大小n,返回一个int数组,int数组中的元素是原数组中每个元素比他大的下一个元素,若不存在则为-1。保证数组中元素均为正整数。测试样例:[11,13,10,5,12,21,3],7返回:[13,21,12,12,21,-1,-1]struct num{ int val;//值 int index;//原先原创 2021-06-22 17:33:31 · 910 阅读 · 1 评论 -
二维最长递增子序列
最长递增子序列通常的基本思路是采取动态规划思路,即:dp[len]=k 表示当前长度为len的递增子序列末尾最小为k动态规划过程为,对于新来的元素m,找到dp数组中第一个大于m的元素dp[i]有: dp[i-1]<m<dp[i] 那么 m与之前的dp[i-1]对应元素可以构成末尾更小的长度为i的递增子序列,即更新 dp[i]=m》dp数组可能增长,对应于情形:m比之前dp[max]还大,max=max+1问题引入:二维最长递增子序列描述给定一个二维int原创 2021-06-22 11:19:45 · 707 阅读 · 0 评论 -
最长字符串:排序+递归判断
问题描述描述给定一个string数组str及其大小n。找出该数组中最长的那个字符串,且要求该字符串能由数组中其他的字符串组成(使用的字符串可重复)。请返回满足要求的最长字符串的长度,否则返回0。测试样例:[“a”,“b”,“c”,“ab”,“bc”,“abc”],6返回:3求解思路问题,一个字符串S能否由字典Dict中各单词拼接而成,可以采取递归的思路:即:判断若字符串S前面部分等于Dict中一个单词word 那么=》剪切掉S前面部分,剩余部分递归的进行判断本问题优化策略原创 2021-06-21 17:31:50 · 240 阅读 · 0 评论 -
队列模拟+归并求解
题目描述排队等号时,观察到以下场景。银行有m个服务窗口,假设当前有n个人等待办理业务,那么这n个人会被顺序分配一个从1到n的号码。等待办理业务的流程如下:从第1号到第n号顺序的进行排队。假设当前第1号到第i-1号都正在办理或已经办理完业务,且某个窗口A没有客人正在办理业务,那么第i号会马上到窗口A办理他的业务。如果有多个这样的窗口,第i号会随意选择一个窗口。0时刻,观察到m个窗口都没有客人正在办理业务,而n个人正在等待办理业务。为了简化问题,我们假设第i号不管在哪个窗口办理业务,办原创 2021-04-29 14:57:18 · 184 阅读 · 0 评论 -
树的分割:DFS后序遍历
题目描述有n个房间,房间之间有通道相连,一共有n-1个通道,每两个房间之间都可以通过通道互相到达。通过封闭一些通道来把n个房间划分成k个互相不连通的区域,他希望这k个区域内部的金币数目和都大于等于m,是否可行。示例1输入3,2,3,[1,2],[2,3],[3,1,2]返回值true说明切断1和2之间的通道,划分出了2个金币数为3的连通块第一个参数n代表房间数量第二个参数k代表要划分成k块区域。第三个参数m代表每块区域的金币数要大于等于m第四、五个参数vector原创 2021-03-28 13:01:10 · 386 阅读 · 0 评论 -
Leetcode通配符匹配②
题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配示例1输入“aaa”,“a*a”返回值true思路本题不同于以往的.代表一个字符 代表任意字符串(包含空)的问题。本题代表前面的字符可以统配0或者多次采取dp[i][j]表示串的前面i原创 2021-03-23 01:36:53 · 171 阅读 · 0 评论 -
区间+二分:求解最值
二分思想当可以确认所求的问题的解,一定位于一个有序区间内,并且满足区间前面部分满足要求,区间后面部分不满足要求,那么可以采取二分的思想进行对数级别复杂度的求解定位。题目描述一个长度为n的正整数序列,从里面取出一段连续的长度大于等于k的序列。定义一个序列的“中数”为最大的整数x,满足序列中至少一半的数字大于等于x从中任取序列的,若存在中数,最大中数可以是多少?示例1输入5,3,[30,1,2,31,9]返回值30说明选前四个数字组成[30,1,2,31],中数为30求原创 2021-03-16 12:07:17 · 346 阅读 · 0 评论 -
dp+滚动区间:字母交换
dp问题的核心思路是利用之前的计算结果来计算当前的问题,主要包含两大类型:①用序号之前的计算结果,即k=>k+1由k步结果计算k+1结果②用小规模问题的计算结果,例: [left+1,right-1]=>[left,right]即无关序号,关心问题规模题目描述字符串S由小写字母构成,长度为n。定义一种操作,每次都可以挑选字符串中任意的两个相邻字母进行交换。询问在至多交换m次之后,字符串中最多有多少个连续的位置上的字母相同?输入描述:第一行为一个字符串S与一个非负整数m。(1.原创 2021-03-15 14:15:20 · 207 阅读 · 0 评论 -
BFS+优先队列:BOX
题目描述有一个推箱子的游戏, 一开始的情况如下图:上图中, ‘.’ 表示可到达的位置, ‘#’ 表示不可到达的位置,其中 S 表示你起始的位置, 0表示初始箱子的位置, E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格;…S0… -> …S0.注意不能将箱子推动到’#'上, 也不能将箱子推出边界;现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成, 则输出-1。输入描述:第一行为2个数字,n,原创 2021-03-14 12:51:57 · 192 阅读 · 0 评论 -
贪心算法:平均
题目描述有三只球队,每只球队编号分别为球队1,球队2,球队3,这三只球队一共需要进行 n 场比赛。现在已经踢完了k场比赛,每场比赛不能打平,踢赢一场比赛得一分,输了不得分不减分。已知球队1和球队2的比分相差d1分,球队2和球队3的比分相差d2分,每场比赛可以任意选择两只队伍进行。求如果打完最后的 (n-k) 场比赛,有没有可能三只球队的分数打平。输入描述:第一行包含一个数字 t (1 <= t <= 10)接下来的t行每行包括四个数字 n, k, d1, d2(1 <= n原创 2021-03-12 09:52:12 · 276 阅读 · 0 评论 -
Leetcode:dp+跳转
题目描述存在n+1个房间,每个房间依次为房间1 2 3…i,每个房间都存在一个传送门,i房间的传送门可以把人传送到房间pi(1<=pi<=i),现在路人甲从房间1开始出发(当前房间1即第一次访问),每次移动他有两种移动策略:A. 如果访问过当前房间 i 偶数次,那么下一次移动到房间i+1;B. 如果访问过当前房间 i 奇数次,那么移动到房间pi;现在路人甲想知道移动到房间n+1一共需要多少次移动;输入描述:第一行包括一个数字n(30%数据1<=n<=100,10原创 2021-03-11 11:49:00 · 304 阅读 · 0 评论 -
优先队列+模拟:任务调度
问题描述存在多个任务,而这些任务需要人员实现。在某个时间会出现一些任务,每个 有提出时间、所需时间和优先等级。最想实现的任务首先考虑优先等级高的,相同的情况下优先所需时间最小的,还相同的情况下选择最早想出的。同时有M个人员,每个人员空闲的时候就会查看尚未执行并且最想完成的一个任务,然后从中挑选出所需时间最小的一个任务独立实现,如果有多个同时处于空闲状态的人员,那么他们会依次进行查看。输入描述:输入第一行三个数N、M、P,分别表示有N个PM,M个人员,P个任务。随后有P行,每行有4个数字,分原创 2021-03-10 11:14:57 · 502 阅读 · 0 评论 -
单调栈进阶-区间合并
单调栈随着不断的输入数字,从栈底到栈顶维护一个递增的数列,当新来的数字比栈顶更小时,弹出栈顶并完成某种计算,直到保持递增趋势。问题描述给定一个数组序列,需要求选出一个区间,使得该区间是所有区间中经过如下计算的值最大的一个:区间中的最小数*区间所有数的和如给定序列 [6 2 1]则根据上述公式,可得到所有可以选定各个区间的计算值:[6] = 6 * 6 = 36;[2] = 2 * 2 = 4;[1] = 1 * 1 = 1;[6,2] = 2 * 8 = 16;[2,1]原创 2021-03-08 23:42:04 · 283 阅读 · 0 评论 -
集合划分问题-DFS与回溯
集合划分问题集合划分问题是对这样一类问题的抽象,即原始问题包含一些列可能结果,不断的划分出子集并研究剩余的集合能否继续划分,即问题能否最终求解,通常采取dfs进行求解题目描述一种卡牌游戏,规则如下:总共有36张牌,每张牌是1~9。每个数字4张牌。你手里有其中的14张牌,如果这14张牌满足如下条件,即算作和牌14张牌中有2张相同数字的牌,称为雀头。除去上述2张牌,剩下12张牌可以组成4个顺子或刻子。顺子的意思是递增的连续3个数字牌(例如234,567等),刻子的意思是相同数字的3个数字牌(原创 2021-03-06 12:47:59 · 439 阅读 · 0 评论 -
TSP问题-二进制+DP
题目描述从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次。由于经费有限,希望能够通过合理的路线安排尽可能的省一些路上的花销。给定一组城市和每对城市之间的火车票的价钱,找到每个城市只访问一次并返回起点的最小车费花销。输入描述:城市个数n(1<n≤20,包括北京)城市间的车票价钱 n行n列的矩阵 m[n][n]输出描述:最小车费花销 s输入40 2 6 52 0 4 46 4 0 25 4 2 0输出13求解思路旅行商T原创 2021-03-03 14:34:52 · 355 阅读 · 0 评论 -
字典树-异或问题
题目描述给定整数m以及n各数字A1,A2,…An,将数列A中所有元素两两异或,共能得到n(n-1)/2个结果,请求出这些结果中大于m的有多少个。输入描述:第一行包含两个整数n,m.第二行给出n个整数A1,A2,…,An。对于30%的数据,1 <= n, m <= 1000对于100%的数据,1 <= n, m, Ai <= 10^5示例1输入3 106 5 10输出2求解思路容易知道如果两个数字异或的结果res大于m, 那么一定是从某一位开始原创 2021-03-02 14:37:44 · 475 阅读 · 0 评论 -
获取最长递增子数组(连续递增子序列)
最长递增子数组的求解方式,即研究以arr[i]结尾的递增子数组长度,采取经典动态规划即可题目描述现在有一个n个数组成的数列,牛牛现在想取一个连续的子序列,并且这个子序列还必须得满足:最多只改变一个数,就可以使得这个连续的子序列是一个严格上升的子序列,这个连续子序列最长的长度是多少。示例1输入[7,2,3,1,5,6]输出5求解思路现需要修改其中一个数,使得前后构成递增子数组,那么需要知道以任意一个位置开始或者结束的递增子数组长度实现细节:head[] tail[]分别表.原创 2021-03-01 12:53:43 · 2025 阅读 · 0 评论 -
单源最短路径算法
对于单源最短路径算法,最为著名的为基于贪心策略的dijkstra,其维护一个从开始点到所有点的Dis[]数组,每次选取剩余点中距离源点最短的点,加入到已访问集合U中,同时更新源点到剩余点集合V中的点的Dis[]数组。题目描述在一个有向无环图中,已知每条边长,求出1到n的最短路径,返回1到n的最短路径值。如果1无法到n,输出-1输入5,5,[[1,2,2],[1,4,5],[2,3,3],[3,5,4],[4,5,5]]输出9核心公式: dis[index]+map[index][.原创 2021-03-01 05:10:28 · 969 阅读 · 0 评论 -
最小生成树算法-kruskal与prim
最小生成树算法是图论中的经典贪心算法,主要有kruskal和primkruskal算法其基本思想是:每次加入一条尽可能短的边到目标生成树中首先初始化所有节点为单独的树,可采取并查集father数组表示将所有的边按照权重从小到大排列每次选取一条边,如果边两侧的顶点不再一个集合中,那么合并(加入到最终生成树中)否则,抛弃=》直到挑选了n-1条边(节点数目为n)那么即为最终最小生成树prim算法其基本思想是:每次选择离生成树集合最近的点加入到生成树集合首先初始化其中一个节点加入生成树集.原创 2021-02-28 01:03:30 · 172 阅读 · 0 评论 -
字典序与字典树
字典树通常采取一个精简的结构来维护大量的单词集合,并保持有序以及对单词的统计字典序则表示各字符对应位置排序的结果题目描述给定整数n和m, 将1到n的这n个整数按字典序排列之后, 求其中的第m个数。对于n=11, m=4, 按字典序排列依次为1, 10, 11, 2, 3, 4, 5, 6, 7, 8, 9, 因此第4个数是2.对于n=200, m=25, 按字典序排列依次为1 10 100 101 102 103 104 105 106 107 108 109 11 110 111 112 .原创 2021-02-25 11:30:43 · 422 阅读 · 0 评论 -
shell-文本篇
shell是一种壳程序,为用户提供命令行入口,其中包含一些内置的命令,用于文本的处理>cat nowcoder.txt #查看文本内容统计文件的行数>cat nowcoder.txt | wc -l查看文件的最后5行>cat nowcoder.txt | tail -5查看文件的第5行>cat nowcoder.txt | head -5 | tail -1输出一个文本文件 nowcoder.txt中空行的行号,可能连续,从1开始&g.原创 2021-02-25 10:18:50 · 356 阅读 · 0 评论 -
最大线性无关组-混合颜料
题目描述你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的颜色,XOR表示异或操作)。本着勤俭节约的精神,你想购买更少的颜料就满足要求,所以兼职程序员的你需要编程来计算出最少需要购买几种颜色的颜料?.原创 2021-02-24 01:18:25 · 304 阅读 · 0 评论 -
快速矩阵幂与斐波那契第n项
题目描述给出一个整数 n,请输出斐波那契数列的第 n 项对 1e9 + 7 取模的值。容易知道斐波那契数列前几项为 1 1 2 3 5 8 13…满足f[n]=f[n-1]+f[n-2]那么f(n) = f(n-1) + f(n-2)f(n-1) = f(n-1) 矩阵:[ f(n) ] = [ 1*f(n-1) + 1*f(n-2) ] = [ 1 1 ] * [ f(n-1) ][ f(n-1) ] [ 1*f(n-1) + 0*f(n-2) ] [原创 2021-01-29 11:44:26 · 174 阅读 · 0 评论 -
二叉树中最大搜索子树和最大搜索子结构
最大的搜索子树输入描述:第一行输入两个整数 n 和 root,n 表示二叉树的总节点个数,root 表示二叉树的根节点。以下 n 行每行三个整数 fa,lch,rch,表示 fa 的左儿子为 lch,右儿子为 rch。(如果 lch 为 0 则表示 fa 没有左儿子,rch同理)ps:节点的编号就是节点的值。输入3 22 1 31 0 03 0 0输出3基本思路研究root开头的子树是否满足二叉搜索树,满足那么直接返回root的大小否则开始研究root的左右孩子所在子树。原创 2021-01-26 16:31:46 · 386 阅读 · 0 评论 -
二叉树的最近公共祖先
二叉树的最近公共祖先若为传统的tree_node求解问题*基本思路:采取DFS方式,对于当前节点,研究是否为目标节点的一个。然后根据递归子问题的返回,若其中一个子树返回2,那么说明问题已经在子树中解决,否则,计算子树返回的数目+当前节点是否为目标点的数目。最后返回若为多组目标点求解问题基本思路:首先通过DFS建立每个节点=》节点level深度的映射。同时建立每个节点=》父亲节点的映射。(物理存储可能采取map或者数组方式)然后LCA算法过程,首先研究两个点是否在同一Level。如果不原创 2021-01-22 10:50:51 · 183 阅读 · 0 评论 -
位运算实现算术运算
实现加法数在计算机中为补码表示,具体体现为正数为原码,负数为原码取反+1对于num1 num2 其各位值按位或求得加法后的值 即 1|1=0 1|0=1 0|1=1 0|0=0进位值按位与求得加法后的进位,之后再左移一位最后结束循环的过程为不再拥有进位int add(int num1,int num2){ while(num1!=0) //存在进位 { int temp=num2; num2=num2^num1;//作异或运算原创 2021-01-15 15:10:07 · 342 阅读 · 0 评论 -
前缀树实现最大异或子数组
问题描述数组异或和的定义:把数组中所有的数异或起来得到的值。给定一个整型数组arr,其中可能有正、有负,有零,求其中子数组的最大异或和。输入43 -28 -29 2输出7说明{-28,-29}这个子数组的异或和为7,是所有子数组中最大的思路对于求子数组问题,通常采取动态规划dp[i]=k表示前i项的异或值那么对于其中的【i=>j】其异或值为dp[j]与dp[i-1]的“异或值做除法"本题思路是维护一个前缀数组,即字典树形式计算XOR[]表示前i项的异或值,那么对原创 2021-01-15 11:19:38 · 303 阅读 · 0 评论