LeetCode
文章平均质量分 66
Lsiree
这个作者很懒,什么都没留下…
展开
-
LeetCode-栈与队列
1. 225. 用队列实现栈用一个队列就可以实现栈取元素时要把队列尾元素取出(最后进入队列的元素)把前n-1个元素放到队列尾并弹出,这样队列的头部就是最后进入队列的元素了,取出他即可class MyStack {private: queue<int> que;public: MyStack() { } void push(int x) { que.push(x); } int pop() { int n原创 2021-02-09 18:02:44 · 178 阅读 · 0 评论 -
LeetCode-回溯
1. 77. 组合每次选择一个数,然后下一个数从他之后选择剪枝:当剩余元素加一起也不满足k时也不再遍历1.已经选择元素个数:path.size()2.还需要选择元素个数k - path.size()3.n=4,k=4,还需要四个元素,最多从倒数第4个元素选,倒数第四个元素为n - 3比n - 还需要的元素个数(4),大1,所以要加1即索引最多遍历结果为n - (k - path.size()) + 1class Solution {private: vector<int&g原创 2021-02-28 22:31:55 · 233 阅读 · 0 评论 -
LeetCode-图
1. 997. 找到小镇的法官将每个人视为点的话,法官是那个入度为n-1,出度为0的人为节省空间,可用一个数组记录,投票–,被投票++,只有法官最后结果为n-1,找不到返回-1int findJudge(int N, vector<vector<int>>& trust) { vector<int> in(N+1,0); for(auto vec:trust){ in[vec[0]]--;原创 2021-01-19 22:38:32 · 97 阅读 · 0 评论 -
LeetCode-并查集
1. 547. 省份数量经典题目,找无关联点集的数量merge并,find查,add添加节点,主要就是三个函数class unionFind{public: unordered_map<int,int> fathers; int sum=0; void add(int x){ //添加节点 if(!fathers.count(x)){ fathers[x]=x; sum++; }原创 2021-01-18 22:47:48 · 183 阅读 · 1 评论 -
LeetCode-二叉树
1. 剑指 Offer 55 - I. 二叉树的深度每个节点的深度为左右孩子最大深度+1递归从下到上,出口为空节点深度为0int maxDepth(TreeNode* root) { if(root==NULL){ return 0; } int maxl=maxDepth(root->left); int maxr=maxDepth(root->right); return maxl&原创 2021-01-14 23:12:24 · 312 阅读 · 0 评论 -
LeetCode-贪心算法
1. 题号860. 柠檬水找零本题贪心之处在于面对20块钱优先找10快钱付这个代码真简洁,只要进行每次的找零操作,把判断放在了最后,只要5块钱个数小于零(说明不够用了)返回false,没有那么多冗余代码bool lemonadeChange(vector<int>& bills) { int n=bills.size(),count5=0,count10=0; for(int m:bills){ if(m==5){原创 2021-01-07 22:40:56 · 204 阅读 · 0 评论 -
LeetCode-数学
1. 题号204. 计数质数厄拉多塞筛法,创建n大小的数组,1为质数,2非质数,找到一个质数后,把每一个质数的倍数都标记为0,直接让j=i*i是因为,这个范围内的数都被他之前的质数标记过了如3直接从9开始遍历,6已经被2标记过了int countPrimes(int n) { vector<int> flag(n,1); int ans=0; for(int i=2;i<n;i++){ if(flag[i]){原创 2021-01-06 22:50:38 · 76 阅读 · 0 评论 -
LeetCode-哈希表
1.题号217. 存在重复元素遍历,放入散列集中,如果散列集中已经存在,返回truebool containsDuplicate(vector<int>& nums) { unordered_set<int> s; for(int i:nums){ if(s.find(i)!=s.end()){ return true; } s.inse原创 2021-01-06 22:50:12 · 186 阅读 · 0 评论 -
LeetCode-数组
1.题号628. 三个数的最大乘积最大三数之积为,三个最大值相乘,或最小两个负数与最大正数相乘的最大值可以只遍历一次,记录下这五个数,达到O(N)时间复杂度int maximumProduct(vector<int>& nums) { int max1=INT_MIN,max2=INT_MIN,max3=INT_MIN; int min1=INT_MAX,min2=INT_MAX,n=nums.size(); for(int i=0;原创 2021-01-04 23:24:26 · 293 阅读 · 0 评论 -
LeetCode-排序
1. 剑指 Offer 40. 最小的k个数在最大堆改变一个数时,调用一次调整堆就可将堆再次变为最大堆把前k个数调整为最大堆,从第k个数与最大堆顶比较,堆顶大于arr[k]就交换,再把前k个数调整为最大堆比较一遍过后前k个数即为最小的k个数 void adjustHeap1(vector<int>& arr,int k,int i) { 调整堆,把前k个数调整为最大堆 int father = i, child = 2 * i + 1; while (ch原创 2021-01-03 22:34:36 · 166 阅读 · 1 评论 -
排序算法
1. 冒泡排序每次把最大值放到后面,重复size-1次优化i=n-1,j<i ,后面有序的部分不会再被比较大小if(flag),一次都没有交换代表数组已经有序,直接break即可void bubble(vector<int>& arr) { int n = arr.size(); for (int i = n - 1; i > 0;i--) { bool flag = true; for (int j = 0; j < i;j++) {原创 2021-01-02 11:30:23 · 115 阅读 · 0 评论 -
LeetCode-分治法
写在前面:二分查找需要有序排列,时间复杂度为log2n二分查找迭代:public static int binarySearch(int targe,int[] nums) { int left = 0; int right = nums.length; while(left<=right) { int mid = left+(right-left)/2; if(nums[mid] == targe) { return mid; }else if(nums[原创 2020-11-04 17:03:56 · 226 阅读 · 0 评论 -
LeetCode-动态规划
1.题号5:最长回文串(好棒!)方法一:斜线填表动态规划本题原理:在回文字符串首尾添加相同字符依然是回文字符串利用布尔类型的数组记录从 i 到 j 的字符串是否为回文字符串双重循环,外层为字符串间隔长度,内层遍历字符串,到 i后的长度不足k结束,这样各种字符串都遍历了一遍。根据字符串长度(k)不同,判断是否为回文字符串的方法也不同,k = 1,长度为一都是回文字符串,即对角线都是true。长度为二判断两个字符是否相等。字符串大于等于三,判断首尾是否相等&&bool[i+1][j-1原创 2020-10-29 22:06:57 · 170 阅读 · 0 评论 -
LeetCode-字符串
题号6:Z字形变换方法一:按照z字形顺序,到第一行和最后一行时变换变换方向public String convert(String s, int numRows) { if (numRows == 1) return s; List<StringBuilder> rows = new ArrayList<>(); for (int i = 0; i < Math.min(numRows, s.length()); i++){ .原创 2020-10-25 19:04:13 · 241 阅读 · 0 评论 -
LeetCode-双指针
题号3:无重复字符的最长子串滑动窗口,相当于以每个字符都作为起始位置找寻最长值,只需遍历一次用哈希集合储存之前的字符串,无需重复遍历也可判断是否已经存在public int lengthOfLongestSubstring(String s) { // 哈希集合,记录每个字符是否出现过 Set<Character> occ = new HashSet<Character>(); int n = s.length(); .原创 2020-10-18 21:13:34 · 129 阅读 · 0 评论 -
LeetCode笔记
题号1013:能否分成连续的三等分思维方式真的重要,分成三等分,不能被三整除的数自然排除;每一份为sum/3,只需累加到该数值,count计数加一,累加归零,当i<length-1时,count>2即可;要更加虚心的学习;sum归零时要在上层循环归零题号7:整数倒置int取值范围【-2的31次方,2的31次方-1】-2147483648 ~ 21474836474个字节,即32个二进制位 while(x!=0){ i=i*10+x%10; .原创 2020-10-17 20:18:42 · 122 阅读 · 1 评论