LeetCode
蒟蒻颖
一个热爱开发的数学蒟蒻
展开
-
Knuth 洗牌算法
核心思想洗牌算法(Knuth shuffle算法):对于有n个元素的数组来说,为了保证洗牌的公平性,应该要能够等概率的洗出n!种结果。举例解释如下:开始数组中有五个元素;在前五个数中随机选一个数与第五个数进行交换,每个数都有五分之一的概率被交换到最后一个位置;在前四个数中随机选一个数与第四个数进行交换,每个数都有五分之一的概率被交换到第四个位置;在前三个数中随机选一个数与第三个数进行交换,每个数都有五分之一的概率被交换到第三个位置;综上所述,每个数都有相等的概率被放到任意一个位置中,即每个位置原创 2021-11-22 23:00:45 · 1293 阅读 · 0 评论 -
摩尔投票法
核心思想核心思想为对拼消耗。首先我们考虑最基本的摩尔投票问题,比如找出一组数字序列中出现次数大于总数12\frac{1}{2}21的数字并且假设这个数字一定存在)应用要求达到线性的时间复杂度以及常量级的空间复杂度,直接上摩尔投票法。如果至多选一个代表,那他的票数至少要超过一半(⌊ 1/2 ⌋)的票数;如果至多选两个代表,那他们的票数至少要超过 ⌊ 1/3 ⌋ 的票数;如果至多选m个代表,那他们的票数至少要超过 ⌊ 1/(m+1) ⌋ 的票数。易错点对于m等于2的情况当且原创 2021-10-22 13:15:38 · 273 阅读 · 0 评论 -
LeetCode 1.两数之和
题目链接1.两数之和思路分析可以暴力枚举时间复杂度为O(n2)O(n^2)O(n2),也可以用哈希表把时间复杂度控制在O(n)O(n)O(n)class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> hash; //建立一个无序的哈希表 for(int i = 0; i原创 2021-02-21 19:20:43 · 220 阅读 · 0 评论 -
LeetCode 7. 整数反转
题目链接7. 整数反转注意题目已经更改为不允许存储 64 位整数(有符号或无符号)。class Solution {public: int reverse(int x) { int total = 0; while(x){ if(total > 0 && total > (INT_MAX - x % 10) / 10) return 0; if(total < 0 &原创 2021-03-19 14:24:26 · 185 阅读 · 0 评论 -
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置
题目链接34. 在排序数组中查找元素的第一个和最后一个位置与剑指 Offer 53 - I. 在排序数组中查找数字 I一样(仅返回值不同)class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { std::ios::sync_with_stdio(false); if(nums.empty()) return {-1, -原创 2021-03-30 19:00:36 · 191 阅读 · 0 评论 -
LeetCode 42. 接雨水
题目链接42. 接雨水思路分析与程序员面试金典 面试题 17.21. 直方图的水量相同。class Solution {public: int trap(vector<int>& height) { std::ios::sync_with_stdio(false); if(height.empty()) return 0; int n = height.size(); vector<int>原创 2021-04-02 23:11:48 · 211 阅读 · 0 评论 -
LeetCode 54. 螺旋矩阵
题目链接54. 螺旋矩阵蛇形矩阵的思路class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { int m = matrix.size(), n = matrix[0].size(); int q[m][n]; memset(q,0,sizeof(q)); int x = 0, y原创 2021-03-20 19:21:17 · 206 阅读 · 0 评论 -
LeetCode 61. 旋转链表
题目链接61. 旋转链表一共用两个指针,第一个记录链表的尾节点,第一次遍历记录链表的长度,由于k可能很大所有我们对k模上n,第二次遍历记录我们用第二个指针记录要翻转的第二段链表的前一个节点,然后用尾部指针tail的next指针指向头结点,头结点等于第二个指针的next指针,第二个指针的next指针指向NULL。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode原创 2021-03-27 08:29:34 · 209 阅读 · 0 评论 -
LeetCode 73. 矩阵置零
题目链接73. 矩阵置零用第一行与第一列来记录对应行是否有0用两个变量来记录第一行和第一列是否有0class Solution {public: void setZeroes(vector<vector<int>>& matrix) { std::ios::sync_with_stdio(false); if(matrix.empty()) return ; int n = matrix.size(), m原创 2021-03-21 08:18:18 · 208 阅读 · 0 评论 -
LeetCode 74. 搜索二维矩阵
题目链接74. 搜索二维矩阵与剑指 Offer 04. 二维数组中的查找一样class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { std::ios::sync_with_stdio(false); if(matrix.empty()) return false; int i = 0, j = m原创 2021-03-30 09:20:15 · 193 阅读 · 0 评论 -
LeetCode 82. 删除排序链表中的重复元素 II
题目链接82. 删除排序链表中的重复元素 II设置虚拟头结点dummy不用考虑边界情况,p指针指向的是上一个没有重复的元素的位置,初始位置是dummy,q从p->next开始,一直走到第一个与q->next不同元素的位置,删除中间的即可。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(原创 2021-03-25 08:55:19 · 188 阅读 · 0 评论 -
LeetCode 92. 反转链表 II
题目链接92. 反转链表 II思路分析可以用到206. 反转链表的反转思路/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(原创 2021-03-19 09:30:15 · 204 阅读 · 0 评论 -
LeetCode 150. 逆波兰表达式求值
题目链接150. 逆波兰表达式求值注意题目已经更改为不允许存储 64 位整数(有符号或无符号)。class Solution {public: int evalRPN(vector<string>& tokens) { int stk[tokens.size()], tt = 0; if(tokens.size() == 1) return stoi(tokens[0]); for(auto &t : token原创 2021-03-20 16:29:33 · 184 阅读 · 0 评论 -
LeetCode 154. 寻找旋转排序数组中的最小值 II
题目链接154. 寻找旋转排序数组中的最小值 II思路分析与剑指 Offer 11. 旋转数组的最小数字一样。class Solution {public: int findMin(vector<int>& nums) { std::ios::sync_with_stdio(false); int l = 0, r = nums.size() - 1; while(r > 0 && nums[r]原创 2021-03-30 20:18:58 · 180 阅读 · 0 评论 -
LeetCode 206. 反转链表
题目链接206. 反转链表思路分析在这里插入代码片原创 2021-03-18 10:04:20 · 194 阅读 · 0 评论 -
LeetCode 728. 自除数
题目链接728. 自除数数据范围小,暴力枚举就可以。class Solution {public: bool check(int x){ int n = x; while(n){ int t = n % 10; if(t == 0 || x % t != 0) return false; n /= 10; } return true; }原创 2021-03-20 20:22:56 · 183 阅读 · 0 评论 -
LeetCode 1006. 笨阶乘
题目链接1006. 笨阶乘class Solution {public: int clumsy(int N) { std::ios::sync_with_stdio(false); if(N <= 4){ int res[] = {0, 1, 2, 6, 7}; return res[N]; }else{ int res[] = {1, 2, 2, -1};原创 2021-04-01 22:31:02 · 195 阅读 · 0 评论 -
LeetCode 1603. 设计停车系统
题目链接1603. 设计停车系统class ParkingSystem {public: vector<int> tot; ParkingSystem(int big, int medium, int small) { tot = {big, medium, small}; } bool addCar(int carType) { carType--; if(tot[carType] >= 1)原创 2021-03-19 12:16:24 · 188 阅读 · 0 评论