2023-04-14:n对情侣坐在连续排列的 2n 个座位上,想要牵到对方的手,人和座位由一个整数数组 row 表示,其中 rowi 是坐在第 i 个座位上的人的ID,情侣们按顺序编号,第一对是 (0,...实现并查集结构体的三个方法: a. 初始化方法 new,初始化父节点数组和子树大小数组,并将父节点数组的值初始化为自身,连通分量数初始为节点数量。 b....根据测试数据 row = 0, 2, 1, 3,第一对情侣坐在座位0和1上,第二对情侣坐在座位2和3上,因此已经满足牵手的条件。...而在测试数据 row = 3, 2, 0, 1 中,第一对情侣坐在座位3和2上,第二对情侣坐在座位0和1上,因此需要交换他们的座位才能满足牵手的条件。...在计算最少交换座位次数的函数 min_swaps_couples 中,遍历相邻的座位需要O(n) 的时间,每次调用并查集中的 find 方法和 union 方法的时间复杂度均为O(α(n)),其中α(n
2023-04-14:n对情侣坐在连续排列的 2n 个座位上,想要牵到对方的手, 人和座位由一个整数数组 row 表示,其中 row[i] 是坐在第 i 个座位上的人的ID, 情侣们按顺序编号,第一对是...实现并查集结构体的三个方法: a. 初始化方法 new,初始化父节点数组和子树大小数组,并将父节点数组的值初始化为自身,连通分量数初始为节点数量。 b....根据测试数据 row = [0, 2, 1, 3],第一对情侣坐在座位0和1上,第二对情侣坐在座位2和3上,因此已经满足牵手的条件。...而在测试数据 row = [3, 2, 0, 1] 中,第一对情侣坐在座位3和2上,第二对情侣坐在座位0和1上,因此需要交换他们的座位才能满足牵手的条件。...在计算最少交换座位次数的函数 min_swaps_couples 中,遍历相邻的座位需要O(n) 的时间,每次调用并查集中的 find 方法和 union 方法的时间复杂度均为O(α(n)),其中α(n
2023-05-17:一个正整数如果能被 a 或 b 整除,那么它是神奇的。给定三个整数 n , a , b ,返回第 n 个神奇的数字。...2.初始化变量 l 为0,变量 r 为 (n * min(a, b)),其中 min(a, b) 表示 a 和 b 中的最小值。在这个范围内通过二分查找获得第 n 个神奇数字。...3.对于每个二分查找猜测值,计算在 a和b中出现的神奇数字个数:m/a + m/b。然后计算 a 和 b 的公共倍数 lcm 在 m 范围内出现的神奇数字个数:m/lcm。...4.如果出现的神奇数字总数大于或等于 n,则将当前猜测值存储在变量 ans 中,并将右边界向左移动一位(即缩小区间的范围)。...在这个算法中,使用了二分查找来搜索第 n 个神奇数字。在最坏情况下,二分查找的迭代次数为 O(logN)。因此,时间复杂度为 O(logN)。
2023-08-02:给定一棵树,一共有n个点, 每个点上没有值,请把1~n这些数字,不重复的分配到二叉树上, 做到 : 奇数层节点的值总和 与 偶数层节点的值总和 相差不超过1。...返回奇数层节点分配值的一个方案。 2 n <= 10^5 。 来自腾讯音乐。 答案2023-08-02: 大致步骤如下: 1.计算出1到n的总和sum。...generate函数用于生成一个数组,其中包含k个数,这k个数的和为指定的wantSum。如果无法生成满足要求的方案,则返回nil。...这些数字 // 其中选k个数字 // 一定要让k个数字的累加和是wantSum // 返回,哪k个数字,只要返回一种方法就可以 int* generate(int wantSum, int n, int.../ 1~n这些数字,选k个,能不能求和逼近一半 // 返回方案 int* ans = team(n, k); if (ans !
排序法 找到TopK,并且排序TopK 啥,你想要我找到TopK?不光光TopK,你想要多少个,我给你多少个,并且还给你排序给排好,啥排序我最熟悉呢? 如果你想到冒泡排序O(n^2)那你就大意了啊。...k个,但是其实上我们分析一下这个堆排序的过程和几个注意点哈: 堆这种数据结构,分为大根堆和小根堆,小根堆是父节点值小于子节点值,大根堆是父节点的值大于子节点的值,这里肯定是要采用大根堆的。...堆排序从大的来看可以分成两个部分,无序数组建堆和在堆基础上每次取对顶排序。...这部分需要堆快排有一定了解和认识,前面很久前写过:图解手撕冒泡和快排 (后面待优化),快排的核心思想就是:分治 ,每次确定一个数字的位置,然后将数字分成两个部分,左侧比它小,右侧比它大,然后递归调用这个过程...我们求TopK,其实就是求比目标数字大的K个,我们随机选一个数字例如上面的5,5的左侧有4个,右侧有4个,可能会出现下面几种情况了: ① 如果k-1等于5右侧数量,那么说明中间这个5就是第K个,它和它的右侧都是
来源:http://t.cn/EyRai6U 一个故事 是什么使你留在你的公司 对未来的预期 自我的成长 当前的经济原因 自己喜欢的事情 安逸的工作 感情因素 其他 最后 ---- 一个故事 之前离职的一个同事...,最后还是没能再回到我的团队; 这是一个非常普通的故事,在职场上经常会见到,但你有没有仔细想过,是什么使你留在你的公司呢?...,他可能就会考虑换个工作,主动把自己推到一个不学习不行的境地内; 作为管理者最好的办法是让员工伴随着公司的成长而实现自我成长,所以管理者应该时刻告诫自己:“切莫安于现状”,一个公司就是要发展,就是要扩张...,在一个岗位上“将就着”、“应付着”,这等于是自杀。...如果你是一个管理者,你团队内有没有你比较担心要离职的人呢?你从我这篇文章里学到了对付他们的办法了吗?
题目大意 一直线上站了N个孩子,每个孩子都有一个属于自己的数字,现在按照如下规则给孩子分发糖果:每个孩子至少有一个糖果;相邻的孩子中数字比较大的那个拿的糖果也比较多。求最少要发掉多少个糖果。...想象下,先从前面开始升序遍历,所有升序的就从1开始给,再从后面开始升序遍历,所有升序的就从1开始给,遇到所有需要改变值的节点,对比想要改成的值与之前的值,取最大的保证其对两边都是最大。...注意: 在数组一开始就为降序时,如下例,他的第1和第2个孩子会先分到同样的1个。要从后面开始扫描,将降序的较高孩子分得更多的糖果。...) result = [1 for __ in range(n)] for i in range(1, n): if ratings[i-1] <...ratings[i]: result[i] = result[i-1] + 1 # 要从后面开始扫描,将降序的较高孩子分得更多的糖果。
题意 给定一个n,表示1到n这n个数字,要求用这n个数构建二叉搜索树(Binary Search Tree)简称BST,要求我们构建出所有不同的二叉搜索树。...这个时候就需要我们有敏锐的意识,就好像是一个经验丰富的老将,观察地形之后发现强攻不可为,那么自然就会退下来想一想其他的办法。...如果仔细想,会发现其实没什么区别, 我们只不过是在n=1的情况当中加入了2这个数字而已。同理,我们发散一下n=k和n=k+1的时候生成的BST之间有什么关系呢?...如果我们知道了n=k时候的所有BST,可不可以利用这个关系生成n=k+1时的所有结果呢? 当然是可以的,实际上这也是一个很好的做法。...但是它也有很多问题,最大的问题就是细节太多,而且处理起来太麻烦了。那么有没有简单一点的方法呢? 我们来思考一个问题,我们通过递推和迭代从n=k构造出了n=k+1的情况,这一种构造和递推的思路非常巧妙。
,而是如何判断一个数不是快乐数,如果不是快乐数,说明没有办法通过有限的次数到达数字1,那么到底是 经过多少次呢?...经过第一个节点,需要在数组查找0次,第2个节点,数组查找1次,第i个节点,在数组查找i-1次,直到遍历第n+1个节点,查找的总次数为(n + 1) * n / 2,这样时间复杂度为O(n^2)。...后三个月情况 结论就比较清晰了:从第三个月开始,第n个月的兔子数量等于该月的成兔数量与幼兔数量之和,也就是等于第n-1个月的兔子数量与第n-2兔子数量之和。...上例子 分糖果问题 我们有 m 个糖果和 n 个孩子。我们现在要把糖果分给这些孩子吃,但是糖果少,孩子多(mn),所以糖果只能分配给一部分孩子。...假设这 n 个孩子对糖果大小的需求分别是 g1,g2,g3,……,gn。 我的问题是,如何分配糖果,能尽可能满足最多数量的孩子?
题目 你的国家有无数个湖泊,所有湖泊一开始都是空的。 当第 n 个湖泊下雨的时候,如果第 n 个湖泊是空的,那么它就会装满水,否则这个湖泊会发生洪水。 你的目标是避免任意一个湖泊发生洪水。...给你一个整数数组 rains ,其中: rains[i] > 0 表示第 i 天时,第 rains[i] 个湖泊会下雨。...rains[i] == 0 表示第 i 天没有湖泊会下雨,你可以选择 一个 湖泊并 抽干 这个湖泊的水。...如果 rains[i] == 0 ,ans[i] 是你第 i 天选择抽干的湖泊。 如果有多种可行解,请返回它们中的 任意一个 。 如果没办法阻止洪水,请返回一个 空的数组 。...,其中 1 <= x,y <= 10^9 示例 5: 输入:rains = [10,20,20] 输出:[] 解释:由于湖泊 20 会连续下 2 天的雨,所以没有没有办法阻止洪水。
这个题的难点不是判断数是不是快乐数,而是如何判断一个数不是快乐数,如果不是快乐数,说明没有办法通过有限的次数到达数字1,那么到底是 经过多少次呢?1k次,10w次?很难确定上限。...经过第一个节点,需要在数组查找0次,第2个节点,数组查找1次,第i个节点,在数组查找i-1次,直到遍历第n+1个节点,查找的总次数为(n + 1) * n / 2,这样时间复杂度为O(n^2)。...按照这种情况,请你计算出第 n 个月,草原上有多少只兔子? 此时给出前面6个月的情况: 六个月兔子情况 从上图我们可以发现,从第一个月到第六个月,草原上的兔子数量分别为1,1,2,3,5,8。...后三个月情况 结论就比较清晰了:从第三个月开始,第n个月的兔子数量等于该月的成兔数量与幼兔数量之和,也就是等于第n-1个月的兔子数量与第n-2兔子数量之和。...分糖果问题 我们有 m 个糖果和 n 个孩子。我们现在要把糖果分给这些孩子吃,但是糖果少,孩子多(mn),所以糖果只能分配给一部分孩子。
红黑树是一种叶子是黑色果子是红色的树。 。。 当然,这个是我说的。 。。 《算法导论》上可不是这么说的: 假设一个二叉查找树满足以下的红黑性质,那么则为一个红黑树。...在你完毕工作之后,直接向大黄提交新的树的中序遍历结果就好了。...输入 输入分两部分: 第一部分:一个整数T(1的组数。 第二部分:第一行是一个数字N,表示红黑树的节点个数。...0N<10 然后以下有N行,每行三个数字,每一个数字的大小都在-1~N-1之间。第一个数字表示当前节点的标号,后面两个数字表示这个节点的左孩子和右孩子。假设是-1的话表示是空节点。...#include struct Node{ int left, right; } tree[12]; //第11个节点作为保存树根信息的节点 int t, n, m; void
这种解法没毛病,但有没有优化的方案呢? 要知道两层循环很多情况下都意味着O(n^2) 的复杂度,这个复杂度非常容易导致你的算法超时。...height[i], height[j]); max = Math.max(max, area) } } return max; } 那么有没有更好的办法呢...题目描述 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。...题目描述 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。...题目描述 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
通常的方法是链表中每个结点由三个域组 成, 数据域和左、右指针域 ,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。...;//保存的数据 struct BinaryTreeNode* left;//左孩子结点的地址 struct BinaryTreeNode* right;//右孩子结点的地址 }BTNode; 有了一个结点的结点代码...,但是因为二叉树的创建方式比较复杂,所以我们这里手动创建一个二叉树进行实现~ 手动创建二叉树 这里呢,我们创建一个比较复杂的二叉树,既然二叉树也是由一个个结点组成的,那么我们创建二叉树就需要创建一个个结点再进行连接起来...,是不是很神奇~这里我们来看看这里的递归是如何达到我们想要的效果的~ 解释:如果根结点为空就打印NULL,如果根结点不为空就打印根结点,然后再同样的方式遍历左孩子结点和右孩子结点(左孩子结点和右孩子结点也就是子树的根结点...),这里的递归也就是先往下面一层层递归然后再回退~画图分析~ 怎么样~有没有体会到递归的暴力美学呢?
选择某个父元素的一个或多个特定的子元素(重点) n 可以是数字,关键字和公式 n 如果是数字,就是选择第 n 个子元素, 里面数字从1开始… n 可以是关键字:even 偶数,odd 奇数 n 可以是公式...:常见的公式如下 ( 如果n是公式,则从0开始计算,但是第 0 个元素或者超出了元素的个数会被忽略 ) 个孩子 我是第2个孩子 我是第3个孩子 我是第4个孩子 我是第5个孩子...li>我是第8个孩子 区别: 1. nth-child 对父元素里面所有孩子排序选择(序号是固定的) 先找到第n个孩子,然后看看是否和...先去匹配E ,然后再根据E 找第n个孩子 实例如下: <!
这里是「小程序问答」栏目的第 8 期 天气渐渐回暖,憋了一个冬天的你,是不是也蠢蠢欲动? 在微信群里组局,你可能需要「群约小助手」这款小程序,帮助你轻松完成聚会名单统计。...第 11 问:有没有可以听各地广播电台的小程序? 第 13 问:小程序模糊搜索的原理是什么? 如果你也想提问,请到文末查看「小程序问答」提问指南。 小程序使用问题 1. 如何关闭小程序?...具体请见小程序问答第二期第 6 问。 2. 有没有可能按照功能查找小程序哇? 现在小程序也支持按分类搜索了。...您好,问一下小程序第一次打开误点了拒绝授权之后,再也没办法重新授权了,怎么办? 先在你的小程序列表中删除该小程序,然后再重新搜索并打开该小程序,即可重新授权。 6....,选择「发送至桌面」,就可以在你的手机桌面看到该小程序啦。 此外,一些桌面 app 也可能会阻止微信添加小程序图标。你可以下载、安装新的桌面 app,以便微信能够顺利添加小程序至新的桌面。 7.
对于向量来说,查找的过程效率极高,然而它的动态操作如:插入和删除的效率就显得特别低下,对比列表,正好相反。 也就是说,有没有一个数据结构能够综合两者的优点呢?...也就是带有一定的线性特征,而又不是狭义的线性结构。 那就是Tree! ? 什么是树 树状图是一种数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。...有序树:若指定Ti为T的第i棵子树,ri为第i个孩子,则T称为有序树。 更好的理解,可以想像以前学过的遗传图谱,就是由两棵或者多棵树组成的森林。...孩子节点法 那么,我们能否把孩子节点放在一个数据集里呢?答案是肯定的。...但是由于这里的孩子数据集不能确定它的长度,难以实现O(n)的数据集,因此我们需要找到新的办法去改进。 ? 长子+兄弟 那么我们怎么进行改进呢?
例子1 我们有 m 个糖果和 n 个孩子。我们现在要把糖果分给这些孩子吃,但是糖果少,孩子多(mn),所以糖果只能分配给一部分孩子。...假设这 n 个孩子对糖果大小的需求分别是 g1,g2,g3,……,gn。问题是,如何分配糖果,能尽可能满足最多数量的孩子?...我们可以把这个问题抽象成,从 n 个孩子中,抽取一部分孩子分配糖果,让满足的孩子的个数(期望值)是最大的。这个问题的限制值就是糖果个数 m。我们现在来看看如何用贪心算法来解决。...另一方面,对糖果大小需求小的孩子更容易被满足,所以,我们可以从需求小的孩子开始分配糖果。因为满足一个需求大的孩子跟满足一个需求小的孩子,对我们期望值的贡献是一样的。...最简单的办法:拿每个数字和他后面的数字比较,看有几个比它小。将比它小的数字个数记作k,通过这样的方式,把每个数字都考察一遍后,对每个数字对应的k值求和,最后得到的总和就是逆序对个数。
这个时候就需要我们有敏锐的意识,就好像是一个经验丰富的老将,观察地形之后发现强攻不可为,那么自然就会退下来想一想其他的办法。...如果仔细想,会发现其实没什么区别, 我们只不过是在n=1的情况当中加入了2这个数字而已。同理,我们发散一下n=k和n=k+1的时候生成的BST之间有什么关系呢?...如果我们知道了n=k时候的所有BST,可不可以利用这个关系生成n=k+1时的所有结果呢? 当然是可以的,实际上这也是一个很好的做法。...我们稍加思考就可以想明白,如果要把一个最大的元素插入BST,那么它只能够放在最右侧的树分支上。也就是说当我们从n=k的情况推导k+1时,根据最右侧链路长度的不同,会衍生出多个解来。...但是它也有很多问题,最大的问题就是细节太多,而且处理起来太麻烦了。那么有没有简单一点的方法呢? 我们来思考一个问题,我们通过递推和迭代从n=k构造出了n=k+1的情况,这一种构造和递推的思路非常巧妙。
有没有瞬间觉得这个Metzner实在是太伟大了?特别是在现在这个大环境下,这种人如果能多出现在高等教育上,顿时觉得中国的高等教育有希望了。...所以说,有的时候,事情不仅仅不是你看到的那样而且换一种看似不 看起来确实令人挺不可思议的,但是为什么呢,如果让我从一个最通俗的方式来解释的话,虽然这里有三个循环,但是在你会发现因为外面两个循环的原因,最里面一个循环执行的次数是很少的...,在你完成全部列举完成的时候很轻松就可以看到在第三轮的时候基本上已经不需要进行交换了,这和显示出来的是一样的,这说明了在第三轮的时候最内层循环一次交换操作也没有进行,而外面两层主要是遍历,相比于交换,它所耗费的资源要少的多...四、圈圈圆圆圈圈 在提高排序算法的效率上,各个大牛数学家努力的想办法减少比较次数,从而减少交换的速度,在此基础上,大牛们又发明了归并排序,快速排序的算法,使得排序的时间界达到了O(N*LOGN...明显,这种想法是错误的。 来看这样一个例子,将一个数字倒序输出,比如输入的是12345,输出是54321,这个问题的解法相当简单,就是不停将自身的对10取余,不停地数以10。
领取专属 10元无门槛券
手把手带您无忧上云