前缀和与差分
前缀和一维前缀和主要思想:
求[l, r] l到r之间的和,比方说从第二个到五个数的总和可以表示为,前5个数的总和减去前一个数的总和:s[l~r] = s[r] - s[l - 1],s为到第i个数的总和
默认s[0] = 0,来统一计算方式(节省了个if)
123456789101112131415161718192021222324252627#include <iostream>#include <vector>#include <algorithm>using namespace std;const int N = 1e6 + 10;int n, m;int a[N], s[N];int main(){ scanf("%d%d", &n, &m); for (int i = 1; i <= n; ++i) scanf("%d", &a[i]); for (int i = 1; i <= n; ++i) s[i ...
游戏编程
游戏编程SFML C++ 项目5.3.2 UE build报错UE 5.3.2 错误解决合集Epic游戏开发问题
二分算法
整数二分本质:
如果有单调性的话,可以二分;但二分的题目,不一定一定要单调性;所以本质不是单调性
在一个区间内,我们定义了一个性质,这个性质左半边满足,右半边不满足,可以将区间一分为二;二分可以寻找边界
主要思想:
以红色区域为True,找分界点(以红色的边界点为分界点)
找到中间值(mid = (l + r + 1)/2)
查看中间值性质(在左半边还是右半边):
a. [mid, r] mid处于左半边,所以分界点一定处于这里(mid到 r,包括mid)
b. [l, mid - 1] mid处于右半边,所以分界点处于左半边 (因 此时 r = mid - 1所以mid需要在之前+1来保证它概括到红色右边 界:mid = (l + r + 1) / 2, 且当情况为 l = r - 1 时,l经过操作还是 l = (l + r) / 2向下取整,还是l,死循 环)
以绿色区域为True(以绿色的边界点为分界点)
mid = (l + r ) / 2
查看中间值性质
a. [l, mid], inclusive
b. [mid + 1, r] 因mid为Fa ...
代码刷题
代码刷题排序算法二分算法前缀和与差分C++面试准备DFS和BFS
SIG grad tech面试的分享
面试流程:
面试内容
总结:
在参加完women’s discory day之后,收到了SIG tech面的邀请(也就是继oa,phone interview,event day后,倒数第二轮的面试),在预约好时间之后,便迎来了痛苦tech面。
面试流程:
提前十五分钟进面试链接。这是因为他们会需要你提前读题,有解题思路,一定要仔细看邮件,不要掐点进去了,那就是妥妥浪费自己机会和时间[doge]
俩面试官会分别自我介绍,讲自己所在团队,和负责内容。在他们说的时候最好仔细听,可以将感兴趣或疑问的点记下,在最后提问环节就可以提出紧密相关的问题以表示对他们团队和公司的兴趣。
之后便是自我介绍,讲下学校背景,擅长的编程语言合作过的项目,最好挑重点的说保持精简,因为面试官们需要把控编程和技术提问的时间,如果想展示擅长的技术,最好将时间留给后面提问互动。
ice break结束,考官会问“有没有把题目看了”,有的话便会让你讲下解题思路,其中会包括你要用什么数据结构,整体的逻辑处理。他们也会给些建议,比方提醒你考虑数据结构的时间和空间复杂度(只是提醒,肯定不会明确说)。同时,他们会很人性地 ...
排序算法
Quick Sort快排 (nLogn)主要思想为:
确定分界点
取左边界
取中间值
取右边界
或随机
划分区间 (最重要,最难的部分,有很多种实现方法)
让一个区间都 <=x
让另一个区间都 >=x
递归
递归地给左右或那俩区间排序
拼接
将排好序的左右俩边合并一起
12345678910111213141516171819202122232425262728293031323334353637383940414243#include <iostream>using namespace std;const int N = 1e6 + 10;int n;int q[N];void quick_sort(int q[], int l , int r){ if (l >= r) return; int x = q[l + r >> 1], i = l - 1, j = r + 1; // define x, 俩指针 while (i < j) { do ...