题目——动态规划——leetcode 3252 特殊数组2
3152. 特殊数组 II代码这种解法不是一个一个的对比,只要给定区间的一个踏入 非特殊数组的行列,这个是关键。
关键词,点位最近符合条件
123456789101112131415161718int n = nums.size(); vector<int> last_same(n); //核心思想是记录一个点位的左侧最近不是 特殊数组 的右边界 for (int i = 1; i < n; i++) { last_same[i] = nums[i] % 2 == nums[i - 1] % 2 ? i : last_same[i - 1]; } vector<bool> res(queries.size()); //排查该点位左侧距离最近的 for (int i = 0; i < queries.size(); i++) { auto& it = queries[i]; res[i] = last_same[it[1]] <= it[0]; } return res;
讲解一开始的想 ...
C#经验
抽象类设置:抽象类不要用作泛型,会影响最后在容器泛型中直接使用抽象类进行访问
对于可能需要的对子类的内容访问,可以使用接口或者抽象方法的形式,
接口接口方法被抽象类实现后前面加上virtual关键字可以被抽象类的实现类重写
12345678910111213141516171819202122232425262728 public interface IRefresh { /// <summary> /// 页面数据刷新 /// </summary> void Refresh<T>(T data) where T : RefreshData<T>, new(); }public abstract class A : IRefresh{ public virtual void Refresh<T>(T data) where T : RefreshData<T>, new() { } ...
AddressAble使用经验
AddressAble资源配置
不同的Group对应最后要打的不同的AB包,每个文件最前面显示的就是对应的key,可以通过key来直接进行访问
一般对于选中的资源都是默认使用路径资源,右键鼠标点击下图红框中间的按钮可以简化名称
加载代码建议参考
Unity 之 Addressable可寻址系统 – 代码加载介绍 – 进阶(一)_unity addressable-CSDN博客
1234567891011121314151617181920212223242526272829 // 使用Addressables.LoadAssetAsync来异步加载资源 AsyncOperationHandle<T> handle = Addressables.LoadAssetAsync<T>(path); // 等待加载操作完成 yield return handle.Task ; //加载成功后把数据发送回去 if (handle.Status == Async ...
Unity网络游戏——Fisnet入门
Fisnet 入门重要概念服务器权威:数据改变只能在服务器上发生,
客户端权威:数据的改变可以在客户端上发生,意思是客户端也可以作为一个服务器
关键性组件
NetWorkManager:可以在插件中预先设置的prefab中找到该名称的预制件,拖拽到场景管理器中,不做任何对象的子对象和父对象
2.NetworkObject:需要进行网络同步的对象添加该组件即可
3.NetworkTransform:在网络中同步该对象的Transform 变化信息
关键类NetWorkBehaviour
本机判断
12345678910111213141516171819202122private void Update() { if (!base.IsOwner) //区分不同客户端,不让在联机的时候一次控制所有Player return; float hor = Input.GetAxisRaw("Horizontal"); float ver = Input.GetAxisRaw(&q ...
题型解法总结——动态规划
动态规划背包问题
这道题是一个典型的01背包问题,只是在处理的时候遇到了递增和递减的问题,最开始很不理解的原因是我对dp的二维数组填充过程以及依赖关系没有明确清晰的认知,再加上在对找零钱这道题目中有递增操作的影响下,一直没能顺利写出正确的过程来。长话短说,这里主要涉及到一个本回合要选择的价值内容对上一轮次的占用问题。
请看如下期望的递增模板
1234567891011121314151617vector<int> f(target + 1, INT_MIN);f[0] = 0;int s = 0;for (int x : nums) { for (int j = 1; j <= target; j++) { if (j >= x) { if (f[j - x] != INT_MIN) { f[j] = max(f[j], f[j - x] + 1); // } } cout << f[j]<<" , "; } cout &l ...
题型总结
动态规划
这道题是一个典型的01背包问题,只是在处理的时候遇到了递增和递减的问题,最开始很不理解的原因是我对dp的二维数组填充过程以及依赖关系没有明确清晰的认知,再加上在对找零钱这道题目中有递增操作的影响下,一直没能顺利写出正确的过程来。长话短说,这里主要涉及到一个本回合要选择的价值内容对上一轮次的占用问题。
请看如下期望的递增模板
1234567891011121314151617vector<int> f(target + 1, INT_MIN);f[0] = 0;int s = 0;for (int x : nums) { for (int j = 1; j <= target; j++) { if (j >= x) { if (f[j - x] != INT_MIN) { f[j] = max(f[j], f[j - x] + 1); // } } cout << f[j]<<" , "; } cout <&l ...
左神算法——位运算
位运算技巧
组合起来n如果是负数就返回0,非负数就返回1
123456789101112// 请保证参数n,不是1就是8的情况下//1 ->@//0->1public static int flip(int n){ return n^1;}// n是非负数,返回1// n是负数,返回8public static int sign(int n){ return filp( (n>>31) & 1);}
例题题目1给定两个有符号int a b,返回其中 较大的,不要进行比较
解法1
配合上技巧1里面的判断符号位正反的代码
解法存在问题,a - b可能溢出,但是可以提醒 互斥条件的使用 可以模拟 ifelse
解法2
关键性代码解析,对于return A 等号右侧公式解读:ab的符号不同,并且a是正数的情况下 以及 ab符号相同并且ab差值大于零的情况下,
至于return B 则是反过来就可以了
题目2判断一个32位的正数是不是2的幂,4的幂
知识补充2的幂就代表在二进制数中只有一个位置上是1,其余 ...
左神算法——大数据题目
大数据常见数据
2的32次方差不多是42亿
int类型的范围是 2的32次方 -1
技巧罗列
哈希函数分流思想是万能的
这类题严格意义上讲的内存限制题目,并且只有以上几种套路,是面试过程中最好准备的
例题问题132位无符号整数的范围是0~4,294,967.295,现在有一个正好包含40亿个无符号整数的文件,所以在整个范围中必然存在没出现过的数。可以使用最多1GB的内存,怎么找到所有未出现过的数?【进阶】内存限制为 10MB,但是只用找到一个没出现过的数即可
空间充足哈希表一个一个存储
空间紧凑利用int类型来作为byte数组,校验范围内每一个数是否出现,并且由于是索引判断,更新速度很快,最后只需要遍历一次byte数组即可
空间非常紧凑在给定的范围内求最大可以分成多长的int数组,得出的结果向下取一个最近的2的整数次幂,指数的大小就是数组的大小。然后用该数组对给定的数进行分割,可以使用 / 操作,获取对应的索引并将该位置上的值++,最后有不满足最大值的就是缺了,然后对于确定是缺少数组的范围再次进行上述操作,不同的是这次不在这个范围内的数不放进去,同时对这个范围的数 进 ...
左神算法——并查集,KMP,Manacher
并查集,KMP,Manacher——左神算法并查集代码实现并查集是把原有的链表结构重新优化,按照图的上一个node来进行保存
import java.util.HashMap;
import java.util.List;
import java.util.Stack;
/**
* @Author laimouren
* @Date 2021/12/7 19:35
*/
public class UnionFind {
//样本进来会包一层,叫做元素
public static class Element<V>{
public V value;
public Element(V value){
this.value = value;
}
}
public static class UnionFindSet<V>{
...
左神算法——二叉树进阶
二叉树进阶树形dp的套路可能性罗列,左右树分别可能收集什么样的信息
过程总结
例题问题1规定 距离 是二叉树中任意连个node之前的node数量加上二者本身的数量和
求一棵二叉树中的最大距离
分析问题拆解,每一个子问题可以看做是1,不考虑根节点的距离,2,必须纳入根节点的距离
前者是根节点两棵子树的最大距离,后者是左右子树的高度和,由此对于树形dp套路中问左右字数要内容的结构就包含自己的最大值和高度。
代码
问题2一家公司人员结构可以看做一棵多叉树结构,每个人结构中包含一个int类型的欢乐值和下级,现在需要开一个排队,需要达到要求来人让欢乐值最大,但是员工的直接上下级不能同时出现。
分析还是从每一棵子树上进行分解,将这棵子树的欢乐值情况列举出来,首先是根节点来的情况,那么所有直接子节点就不来,然后是根节点不来的情况,最大欢乐值就变成了看每棵子树或者不来的最大值,因此可以由此确定返回值的结构,双int,分别代表根节点来或不来的最大欢乐值。
注意在遇见题目的时候不要跳过条件分解这一大前提,直接按照经验去构造解题过程必然会导致带着优化代码的目的去再次审题,容易陷入误区,建议还是跟着步骤 ...