l0oser

l0oser

Thoughts, stories and ideas.

算法

使用异或方法从数组中找出特别的数

寻找只出现一次的数 class Solution { public: int singleNumber(vector<int>& nums) { int res = nums[0]; for (int i = 1; i < nums.size(); i++) { res = nums[i] ^ res; } return res; } }; 根据异或的特性可知,a ^ a = 0。即任何数与其本身异或的结果为0。而0 ^ b = b,即任何数和0进行异或得到它本身。那么,在数组中其它数字都是成双出现时,由于异或满足交换律。只要将数组中每一个数都相互异或,那么成双出现的数就会异或为0,而出现次数为奇数的则会留下来。例如:a ^ b ^ c
1 min read
算法

两数之和

Two Sum(两数之和)哈希表解法原理 核心思想 使用 unordered_map 建立一个哈希表,保存已经遍历过的数字以及它对应的下标。 遍历数组时,对于当前数字 nums[i]: * 计算它需要的另一个数字: [ need = target - nums[i] ] * 如果 need 已经存在于哈希表中,说明找到了两个数: [ nums[i] + need = target ] 返回它们的下标。 * 如果不存在,则将当前数字和下标存入哈希表,供后续查找。 代码 class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map&
2 min read
软件安全

实验5-游戏外挂设计与防范

实验名称 实验 5 游戏外挂设计与防范 实验目的 本实验通过分析 Windows XP 附带的扫雷游戏,实现自动扫雷的外挂程序,一方面了解内存外挂的相关技术,另一方面分析防范此类外挂的方法。 实验原理 通过读写内存数据,确定游戏雷区,之后模拟鼠标操作,实现自动扫雷。 实验内容 加载游戏 运行扫雷游戏,然后打开 CheatEngine(CE),加载游戏进程 图1:打开CE加载扫雷进程 (2)熟悉 CE 工具的使用 为熟悉 CE 工具的使用,我们尝试搜索内存中固定的数值,定位存储地雷数量的变量地址,以及游戏计时器的内存地址。 (a)寻找地雷数量的内存地址 具体地,在 CE 界面选择数据类型为 4 字节,扫描类型为“精确数值”,数值内容填写扫雷游戏所显示的地雷数量,然后单击“初次扫描”,如图
23 min read