leetcode
无痕公子style
这个作者很懒,什么都没留下…
展开
-
leetcode33. 搜索旋转排序数组
题目:33. 搜索旋转排序数组class Solution {public: int search(vector<int>& nums, int target) { unordered_map<int,int> mp; for(int i=0; i<nums.size(); i++) mp[nums[i]] = i; if(mp.count(target) != 0) return mp原创 2021-10-12 19:36:00 · 135 阅读 · 0 评论 -
leetcode18. 四数之和
题目:18. 四数之和排序+双指针class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { int n = nums.size(); vector<vector<int>> vec; if(n < 4) return vec; sort(nums原创 2021-10-12 16:27:13 · 129 阅读 · 0 评论 -
leetcode1509. 三次操作后最大值与最小值的最小差
题目:1509. 三次操作后最大值与最小值的最小差这道题问的是最大和最小之间的差距,无论改变了第一个还是最后一个,其差距肯定是比原来的小。由于本题改变次数较小,我们可以采取枚举法,假设三次都是取左边的,则最后差距为a[n-1]-a[3]若两个取左边,一个取右边,则为a[n-2]-a[2]若1个取左边,2个取右边,则为a[n-3]-a[1]若3个全取右边,则为a[n-4]-a[0]这四种可能取最小即可以此类推此问题可以推广到改变n个值的最小差距。class Solution {public:转载 2021-10-10 19:46:16 · 243 阅读 · 0 评论 -
leetcode264. 丑数 II
题目:264. 丑数 II动态规划3指针:class Solution {public: int nthUglyNumber(int n) { vector<int> dp(n+1); dp[1] = 1; int p2 = 1, p3 = 1, p5 = 1; for(int i=2; i<=n; i++) { int n2 = 2*dp[p2], n3 = 3*dp[p转载 2021-09-10 16:14:13 · 108 阅读 · 0 评论 -
leetcode435. 无重叠区间
题目:435. 无重叠区间按照右边界排序,从左向右遍历,因为右边界越小越好,只要右边界越小,留给下一个区间的空间就越大,所以从左向右遍历,优先选右边界小的。可以找出无重叠区间的个数,那么需要移除的区间个数=总区间数-无重叠区间数;或者直接找重叠区间的个数。class Solution {public: static bool cmp(const vector<int>& a, const vector<int>& b) { re转载 2021-09-09 20:34:28 · 99 阅读 · 0 评论 -
leetcode402. 移掉 K 位数字
题目:402. 移掉 K 位数字参考:ye-shang-6依据数字位数越高影响越大,从最高位挑选数字。例:num = 1432219, k=3,删去k=3个数字,那么就是保留length-k=7-3=4个数字。首先需要挑选首位数字,保证尽量小并且在num中的位置尽量靠左。可以将num = 1432219分为 1432 和 219两部分(保留最后3个作为保底,在之前的4位中找最小)此时start = 0, end = k。在[start,end]中选取一个最小的进行保留,返回最小数字的下标min_pos。转载 2021-09-08 11:30:10 · 107 阅读 · 0 评论 -
leetcode455. 分发饼干
题目:455. 分发饼干class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { std::sort(g.begin(), g.end()); std::sort(s.begin(), s.end()); int i = 0, j = 0, cnt = 0; while(i < g.原创 2021-09-07 20:19:18 · 65 阅读 · 0 评论 -
leetcode752. 打开转盘锁
题目:752. 打开转盘锁这是我看过最清晰易懂的双向bfs讲解:作者:baizimiao链接:https://leetcode-cn.com/problems/open-the-lock/solution/shuang-xiang-bfsliang-mian-bao-jia-zhi-s-hvev/来源:力扣(LeetCode)双向BFS是啥?双向BFS就是同时从起点和终点两个方向开始搜索,一旦搜索到另一个方向已经搜索过的位置(或者说出现某个状态被两个方向均访问到了),就意味着找到了一条联通起点和转载 2021-09-07 19:42:14 · 81 阅读 · 0 评论 -
leetcode207. 课程表
题目:207. 课程表如果只是从所有顶点做一次出发进行深度搜索,会超时,所以必须剪枝:class Solution {private: vector<vector<int>> edges; vector<int> visit; bool can = true;public: void dfs(int pos) { visit[pos] = 1; for(int v: edges[pos])转载 2021-08-30 17:50:51 · 104 阅读 · 0 评论 -
leetcode135. 分发糖果
题目:135. 分发糖果题目的意思是,只要比左右任何一侧的分高,都要得到比他分低的小朋友更多的糖果。class Solution {public: int candy(vector<int>& ratings) { int n = ratings.size(); vector<int> cnt(n); int ans = 0; for(int i=0; i<n; i++) {原创 2021-08-22 11:51:14 · 66 阅读 · 0 评论 -
leetcode环形链表
题目:141. 环形链表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool hasCycle(ListNode *head) { // 快慢指针中的快慢指的是移原创 2021-08-20 09:48:29 · 98 阅读 · 0 评论 -
leetcode面试题 02.07. 链表相交
题目:面试题 02.07. 链表相交这道题第一只想到暴力,能是能过,但是:双层循环效果不佳!/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *getInter原创 2021-08-19 18:52:11 · 73 阅读 · 0 评论 -
leetcode1004. 最大连续1的个数 III
题目:1004. 最大连续1的个数 IIIleetcode题解原链接对于数组 A 的区间 [left,right] 而言,只要它包含不超过 k 个 0,我们就可以根据它构造出一段满足要求,并且长度为 right−left+1 的区间。因此,我们可以将该问题进行如下的转化,即:对于任意的右端点 right,希望找到最小的左端点 left,使得 [left,right] 包含不超过 k 个 0。只要我们枚举所有可能的右端点,将得到的区间的长度取最大值,即可得到答案。要想快速判断一个区间内 0 的转载 2021-08-16 16:30:33 · 145 阅读 · 0 评论 -
leetcode反转链表
题目:剑指 Offer 24. 反转链表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* reverseList(ListNode* head) {原创 2021-08-14 23:57:37 · 73 阅读 · 0 评论 -
leetcode5. 最长回文子串
题目:5. 最长回文子串class Solution {public: string longestPalindrome(string s) { if(s.length() == 1) return s; int max = 1; string longest = s.substr(0, 1); for(int i=0; i<s.length()-1; i++) { string str原创 2021-08-14 17:32:29 · 63 阅读 · 0 评论 -
leetcode321. 拼接最大数
题目:321. 拼接最大数class Solution { public int[] maxNumber(int[] nums1, int[] nums2, int k) { int m = Math.min(k, nums1.length); // 取值范围: n <= k <= m, k表示从nums1取几个数 int n = Math.max(0, k-nums2.length); int[] res = new int[k];转载 2021-08-10 20:37:19 · 127 阅读 · 0 评论 -
leetcode剑指 Offer 25. 合并两个排序的链表
题目:剑指 Offer 25. 合并两个排序的链表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* mergeTwoLists(ListNode* l1, List原创 2021-08-08 16:54:38 · 91 阅读 · 0 评论 -
leetcode剑指 Offer 29. 顺时针打印矩阵
题目:剑指 Offer 29. 顺时针打印矩阵class Solution { public int[] spiralOrder(int[][] matrix) { int[] mat; int row = matrix.length; if(row == 0) { mat = new int[0]; return mat; } int col = ma原创 2021-08-02 11:44:29 · 68 阅读 · 0 评论 -
leetcode443. 压缩字符串
题目:443. 压缩字符串class Solution {public: int compress(vector<char>& chars) { int i = 0; while(i < chars.size()) { char c = chars[i]; // int cnt1 = count(chars.begin(), chars.end(), c); // 统计个数原创 2021-08-01 23:20:03 · 91 阅读 · 0 评论 -
leetcode875. 爱吃香蕉的珂珂
题目:875. 爱吃香蕉的珂珂class Solution { public int minEatingSpeed(int[] piles, int h) { Arrays.sort(piles); int max = piles[piles.length-1]; if(piles.length == h) return max; // 这种情况只能每1h吃掉一堆 int left = 1, right = max, mid, k =原创 2021-08-01 21:22:03 · 87 阅读 · 0 评论 -
leetcode174.地下城游戏
leetcode174.地下城游戏class Solution { public int calculateMinimumHP(int[][] dungeon) { // 正向思维(自顶向下):走到任何一个位置时,血量都不能少于1并且到达终点时为1。 // 最低初始健康点数(最小为1)a + 路径中血(增/减)逐个相加出现的最低值(负值)b >= 1 // 但是从左上往右下的顺序注定a和b都会影响后续的决策。也就是说,这样的动态规划是不满足「无后效性」。 //原创 2021-07-31 23:16:28 · 163 阅读 · 0 评论