
算法
算法和书结构
ddryj
学习中......
展开
-
公钥密码——RSA和Elgamal
简介公钥密码算法也叫非对称加密,主要有RSA算法、Elgamal算法、ECC算法。RSA算法是基于大素数难分解这一数学难题而提出的(两个大质数相乘得到的大数难以被因式分解),原理如下:RSA秘钥生成选取大素数p,q;计算n=pq以及n的欧拉函数φ(n) = φ§ φ(q)=(p-1)(q-1)。关于欧拉函数,大家肯定是学过滴,素数的欧拉函数等于它自己减1,比如φ (3) = 2;φ (...原创 2020-05-01 17:12:51 · 3295 阅读 · 1 评论 -
C++实现最小栈
题目描述设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。代码class MinStack {public: /** initialize your data structure here. */ stack<int> dataStack; //数据栈 stac原创 2021-05-31 19:56:28 · 483 阅读 · 0 评论 -
-整数反转-
题目描述给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64位整数(有符号或无符号)。解题思路难点在于存储被限制在32位空间,下面给出证明,可以避开原数反转后超过32位空间所能表示的最大范围的问题。(看不懂的话结合代码看一下)代码int reverse(int x){ int rev = 0; while (x != 0) { i原创 2021-05-25 21:29:08 · 249 阅读 · 0 评论 -
删除排序数组中的重复项
题目描述给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。思路采用双指针,一个指针负责向后传递原数组,一个指针负责保存不重复的元素。(嘴笨,还是看代码吧,不难理解)代码时间复杂度:O(n)空间复杂度:O(1)int removeDuplicates(vector<int>& nums) { int原创 2021-05-24 17:48:31 · 95 阅读 · 0 评论 -
旋转数组
题目描述给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。代码新数组时间复杂度: O(n)空间复杂度: O(n)void rotate(vector<int> &nums, int k) //k为右移动的距离{ int n = nums.size(); vector<int> num(n); for (int i = 0; i < n; i++) { num[(i+k)% n] = nums[i]; }原创 2021-05-24 17:43:39 · 94 阅读 · 0 评论 -
存在重复元素
题目描述给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。解题思路排序后相同的元素会出现在相邻的位置,只需向后遍历查看是否有相邻的元素相等。代码时间复杂度:O(nlogn)空间复杂度:O(logn)主要取决于排序算法bool singleNumber(vector<int>& nums){ sort(nums.begin(), nums.end()); for (i原创 2021-05-24 17:35:00 · 106 阅读 · 0 评论 -
只出现一次的数字
题目描述给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。作者:力扣 (LeetCode)链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2gy9m/来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处原创 2021-05-24 15:37:08 · 91 阅读 · 0 评论