核心内容摘要
开源播放器全球化适配:实现多语言界面无缝切换的实战指南
目录
子集a.核心思想b.思路c.步骤
死锁的原因
子集
子集 - 力扣LeetCodehttps://leetcode.cn/problems/subsets/description/class Solution { public: void backtrack(vectorint nums, int index, vectorint subset, vectorvectorint result) { if (index nums.size()) { result.push_back(subset); return; } subset.push_back(nums[index]); backtrack(nums, index 1, subset, result); subset.pop_back(); backtrack(nums, index 1, subset, result); } vectorvectorint subsets(vectorint nums) { vectorvectorint result; vectorint subset; backtrack(nums, 0, subset, result); return result; } };class Solution { public: void backtrack(vectorint nums, int index, vectorint subset, vectorvectorint result) { if (index nums.size()) { result.push_back(subset); return; } subset.push_back(nums[index]); backtrack(nums, index 1, subset, result); subset.pop_back(); backtrack(nums, index 1, subset, result); } vectorvectorint subsets(vectorint nums) { vectorvectorint result; vectorint subset; backtrack(nums, 0, subset, result); return result; } };a.核心思想通过递归的方式生成所有可能的子集。
对于数组中的每一个元素都有两种选择将其包含在子集中或不包含。
通过不断递归处理剩余元素可以生成所有子集。
b.思路使用回溯法从数组的第一个元素开始对于每个元素先将其加入当前子集然后递归处理下一个元素递归返回后将该元素从当前子集移除再递归处理下一个元素即不选择该元素的情况。
c.步骤① 初始化一个结果向量result用于存储所有子集以及一个临时向量subset用于存储当前生成的子集。
② 定义一个回溯函数该函数接受当前处理到的元素索引作为参数。
③ 在回溯函数中如果当前索引等于数组长度将当前子集加入结果向量并返回。
④ 否则先将当前元素加入子集递归调用回溯函数处理下一个元素然后从子集中移除刚加入的元素再次递归调用回溯函数处理下一个元素不选择当前元素的情况。
⑤ 调用回溯函数从索引0开始生成所有子集。
⑥ 返回结果向量。
死锁的原因死锁的主要原因可以言简意赅地概括为以下四点①互斥条件资源不能被共享只能由一个进程占用。
② 占有并等待进程在占有至少一个资源的同时等待额外的资源。
③ 非抢占条件已分配给进程的资源不能被强制释放只能由进程自行释放。
④ 循环等待存在一个进程等待循环链每个进程都在等待下一个进程所占有的资源。
这四个条件同时满足时就会导致死锁的发生。
死锁的原因可以
总结为多个进程或线程因竞争资源而陷入相互等待的僵局且都无法继续执行。
具体来说是由于资源的分配和进程的推进顺序不当导致进程间形成了相互依赖、相互等待的关系且这种关系无法自行打破从而使得系统陷入一种停滞状态。
简而言之死锁就是“相互等待对方释放资源导致都无法继续执行”的现象。
希望这些内容对大家有所帮助感谢大家的三连支持