LeetCode
文章平均质量分 50
eynoZzzzc
没有梦想跟咸鱼又有什么区别捏
展开
-
素数问题与质因子分解
素数素数又称质数,是除了1和本身之外不能被其他数整除的一类数字。用数学语言描述即是,对给定的正整数n,如果对于任意的正整数a(1<a<n),都有n%a!=0成立,那么称n是素数;否则称为合数。注:1 既不是素数也不是合数。素数的判断一个整数n如果不能被2,3,...,n-1整除,那么n为素数。使用遍历的方法判断,时间复杂度为O(n)。但在某些数据量大的题目中,该复杂度实际有点大,需要更快的方法。注意到:如果在2~n-1中存在n的约数,设为k,即n%k==0,那么由k*(n/k)==n可原创 2022-03-21 15:51:50 · 498 阅读 · 0 评论 -
静态链表(c++)
文章目录静态链表通用解题步骤一、链表的共享空间1、题目描述输入样例1输出样例1输入样例2输出样例22、思路3、注意4、代码实现二、Linked List sorting1、题目描述输入样例输出样例2、思路3、注意4、代码实现静态链表与动态链表不同的是,静态链表不需要指针来建立结点之间的连接关系。对于有些问题,结点的地址是比较小的整数(例如五位数的地址),就没有必要建立动态链表。静态链表的实现原理是hash,即通过建立一个结构体数组,并令数组的下标直接表示结点的地址,直接访问结点中的元素就可以访问结点原创 2022-03-23 10:13:07 · 2356 阅读 · 1 评论 -
常见排序算法(一)
冒泡排序冒泡排序的本质在于交换,每次通过交换的方式把当前剩余元素的最大值(最小值)移动到一端,当剩余元素减少为0时,排序结束。举例:a=[3,4,1,5,2],以移动最大值为例第一趟:①3与4比较,4大,保持不动,序列为{3,4,1,5,2}②1和4比较,4大,交换位置,序列为{3,1,4,5,2}③4和5比较,5大,保持不动,序列为{3,1,4,5,2}④5与2比较,5大,交换位置,序列为{3,1,4,2,5}第一趟排序结束,进行了四次比较。第二趟:①3与1比较,3大,交换位置,序列为原创 2022-03-15 16:53:47 · 1546 阅读 · 0 评论 -
简单计算器(中缀转后缀)
文章目录题目描述一、思路1.中缀表达式转后缀表达式2.计算后缀表达式二、代码实现题目描述读入一个只包含+、-、*、/ 的非负整数计算表达式,计算该表达式的值。样例输入:30 / 90 - 26 + 97 - 5 - 6 - 13 / 88 * 6 + 51 / 29 + 79 *87 + 57 * 92样例输出:12178.21一、思路1.中缀表达式转后缀表达式①设立一个操作符栈,用来临时存放操作符;设立一个数组或者队列,用以存放后缀表达式;②从左至右扫描中缀表达式,如果碰到操作数(可原创 2022-03-21 21:05:34 · 625 阅读 · 0 评论 -
全排列(递归法)
递归属于分治思想。递归在于反复调用自身函数,每次把问题缩小为子问题,直到缩小到可以直接得到边界数据的结果,然后再往上返回,并在途中求出对应的解。递归的逻辑要求:①递归边界,即问题分解的尽头;②递归式,将原问题分解成若干子问题的某种手段。全排列1~n这些整数所能形成的全部排列,有时需要实现按字典序从小到大排列。问题:输出1~n这n个数字的全排列分析:按照分治、递归的思想,该问题可以分为若干个子问题,即”输出以1开头的全排列“,”输出以2开头的全排列“等等…①我们可以设定一个数组p用来存放当原创 2022-03-15 21:58:23 · 2616 阅读 · 0 评论 -
判断两数保留N位小数的科学计数法是否相等
题目描述:给出两个数,将它们保留N位小数的科学计数法后是否相等。如果相等,则输出YES,并给出转换结果;如果不相等输出NO,并给出两个数的转换结果。样例:输入3 12300 12358.9输出YES 0.123*10^5输入3 120 128输出NO 0.120*10^3 0.128*10^3思路:科学计数法的格式一定为:0.abc...*10^e,所以需要获取到本体部分abc...与指数e,即可以判断两数科学计数法是否相等。考虑到数据本身,可能为:①小于1(0.abcde....原创 2022-03-16 17:29:06 · 361 阅读 · 0 评论 -
常见排序算法(二)
二路归并排序归并排序是一种基于“归并”思想的排序方法。二路归并的原理是,将序列两两分组,将序列归并,组内单独排序,然后以此类推,直到只剩下一个组为止。举例:序列{66,12,33,57,64,27,18}进行二路归并排序。第一趟:两两分组,得到四组:{66,12},{33,57},{64,27},{18},组内单独排序得到{{12,66},{33,57},{27,64},{18}};第二趟:四个组继续两两分组,得到两组:{12,66,33,57},{27,64,18},组内单独排序得到{{1.原创 2022-03-19 00:04:24 · 929 阅读 · 0 评论 -
算法Ⅰ(设计问题)
打乱数组给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。打乱后,数组的所有排列应该是 等可能 的。class Solution { public: vector<int> v; Solution(vector<int>& nums) { v = nums; } vector<int> reset() { return v; } vector<int> shuffle() { vector<in原创 2022-05-03 13:35:56 · 107 阅读 · 0 评论 -
day01
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )当删除元素时,先判断输出栈是否有元素:如果没有元素,判断输入栈是否为空:如果输入栈也为空,返回-1,表示全都为空;如果输入栈不为空,将输入栈的元素依次弹出压入输出栈中,随后弹出输出栈栈首元素如果有元素,直接弹出栈首元素class CQueue { public:原创 2022-05-03 09:43:24 · 52 阅读 · 0 评论 -
03.数组中的重复数字
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。class Solution { public: //排序遍历 int findRepeatNumber(vector<int>& nums) { int n = nums.size(); sort(nums.begin(), nums.end()); for (int原创 2022-05-03 09:37:19 · 208 阅读 · 0 评论 -
算法Ⅰ(动态规划)
爬楼梯最简单的题了~~~class Solution { public: int climbStairs(int n) { if (n <= 2) return n; int dp[n + 1]; dp[1] = 1; dp[2] = 2; for (int i = 3; i <= n; i++) { dp[i] = dp[i - 1] + dp[i - 2]; } return dp[n]; }};买卖股票原创 2022-05-02 23:33:37 · 247 阅读 · 0 评论 -
算法Ⅰ(数学)
Fizz Buzz给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中:answer[i] == “FizzBuzz” 如果 i 同时是 3 和 5 的倍数。answer[i] == “Fizz” 如果 i 是 3 的倍数。answer[i] == “Buzz” 如果 i 是 5 的倍数。answer[i] == i (以字符串形式)如果上述条件全不满足。class Solution { public:原创 2022-04-27 20:38:44 · 75 阅读 · 0 评论 -
算法Ⅰ(排序和搜索)
合并两个有序数组合并两个有序数组给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。// 小技巧v原创 2022-04-26 21:37:28 · 45 阅读 · 0 评论 -
算法Ⅰ(二叉树篇)
定义struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), lef原创 2022-04-25 17:36:33 · 703 阅读 · 0 评论 -
算法Ⅰ(链表篇)
定义struct ListNode { int val; ListNode* next; ListNode(int x) : val(x), next(NULL) {}};删除链表中的节点请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。题目数据保证需要删除的节点 不是末尾节点 。void deleteNode(ListNode* node) { node->val = node-&原创 2022-04-22 10:50:12 · 84 阅读 · 0 评论 -
算法Ⅰ(字符串篇)
反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。//找规律void reverseString(vector<char>& s) { int len = s.size(); for (int i = 0; i < len / 2; i++) { swap(s[i], s[len - i - 1]); }}//原创 2022-04-21 10:28:32 · 198 阅读 · 0 评论 -
算法Ⅰ(数组篇)
删除排序数组中的重复项给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。//双指针int removeDuplicates(vector<int>& nums) { int i = 0; for (int j = 1; j < nums.size(); j++) { if (nums[i] != nums[j]) nums[++i] = nums[j];原创 2022-04-14 21:29:07 · 230 阅读 · 0 评论 -
94.二叉树的中序遍历
二叉树的中序遍历题原创 2022-04-07 21:42:49 · 45 阅读 · 0 评论 -
592.分数加减法
#include <bits/stdc++.h>using namespace std;int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }struct Fraction { int up, down; Fraction() {} Fraction(int Up, int Down) : up(Up), down(Down) {}};Fraction reduction(Fraction result原创 2022-03-21 01:01:12 · 182 阅读 · 0 评论