摘要: 1.求一个数是不是2的幂 方法:对于大于0的数,求他的lowbit,看看是不是和这个数相等就行了。 class Solution { public: bool isPowerOfTwo(int n) { return n > 0 && n == (n & (-n)); } }; 补:或者看n&(n- 阅读全文
posted @ 2026-03-02 18:47 Lambda_L 阅读(6) 评论(0) 推荐(0)
摘要: 如果有一个数组,这个数组中只有一个数出现的次数不够m次,其他数出现次数都等于m次,那么求这个数 思路:创建一个31位的mask数组,将每一位上出现的次数加起来,哪一位出现次数不为m的倍数,那么哪一位就是所求数的一部分 // 已知数组中只有1种数出现次数少于m次,其他数都出现了m次 // 返回出现次数 阅读全文
posted @ 2026-03-02 16:07 Lambda_L 阅读(3) 评论(0) 推荐(0)
摘要: 注意到如果数组中只有一个出现奇数次的数,那么异或和就是答案,现在异或和xor1=a^b, 求xor1的lowbit,再遍历一遍,易知a和b必然有一个&lowbit=0,那么把这样的数找出来,就可以得到其中一个数xor2,xor2^xor1就是另一个数了 class Solution { public 阅读全文
posted @ 2026-03-02 15:56 Lambda_L 阅读(3) 评论(0) 推荐(0)
摘要: 先看归并排序,归并排序就是先排左,再排右,然后把这两部分merge在一起,时间复杂度是O(nlogn)的。 额外空间复杂度O(n); 1)左部分排好序、右部分排好序、利用merge过程让左右整体有序 2)merge过程:谁小拷贝谁,直到左右两部分所有的数字耗尽,拷贝回原数组 void merge(i 阅读全文
posted @ 2026-03-02 13:35 Lambda_L 阅读(4) 评论(0) 推荐(0)
摘要: 三种时间复杂度为O(n2)的排序 简单来说,冒泡排序就是0i范围上,相邻位置较大的数滚下去,最大值最终来到i位置,然后0i-1范围上继续 选择排序就是in-1范围上,找到最小值并放在i位置,然后i+1n-1范围上继续 插入排序比其他两个优秀一些, 就是0~i范围上已经有序,新来的数从右到左滑到不再小 阅读全文
posted @ 2026-03-01 18:37 Lambda_L 阅读(6) 评论(0) 推荐(0)
摘要: 二叉树的遍历一般两种,深搜,广搜。 广搜非常简单,只需要一个队列就行了,只要左右孩子不为空,那么就入队,代码就不放了(); 主要写一下深搜,也就是先序遍历,中序遍历,后序遍历。 三者的区别在于什么时候输出中间元素,也就是头。 递归版本 (代码展示很抽象,但理解意思即可) void preOrder( 阅读全文
posted @ 2026-03-01 17:14 Lambda_L 阅读(26) 评论(0) 推荐(0)
摘要: A Eating Game 其实就是找最大值一共有几个 void solve() { int mx = 0; cin >> n; int cnt = 0; for (int i = 1; i <= n; i++) { int x; cin >> x; if (x > mx) { mx = x; cn 阅读全文
posted @ 2026-02-28 15:42 Lambda_L 阅读(18) 评论(0) 推荐(0)
摘要: 2026-2-27日下午 因为了解了一下对拍,所以学了学随机数 我比较了一下,有rand,srand(),以及mt19937, 其中mt19937属于线程安全和进程安全,而srand是线程不安全,进程安全, 所以选择使用mt19937,mt19937需要使用 #include< random > 头 阅读全文
posted @ 2026-02-27 17:21 Lambda_L 阅读(15) 评论(0) 推荐(1)
摘要: 二分峰值题 https://leetcode.cn/problems/find-peak-element/ 这个题以前也见过,我觉得这个题目思路很巧妙,把他记录下来。 简单来讲就是先判断两边元素是不是峰值,如果是直接返回结束,如果不是,那么我们可以知道这个数组的趋势是开始上升,最后下降,所以中间一定 阅读全文
posted @ 2026-02-27 16:37 Lambda_L 阅读(10) 评论(0) 推荐(0)