每周一题( hihocode||leetcode)
文章平均质量分 85
为了毕业还能找到一份糊口的offer, MrYx会坚持每周至少做一道来自hihocode或者多道来自leetcode的题目!
code_mryxj
这个作者很懒,什么都没留下…
展开
-
leetcode 218. 天际线问题
题意:如第一幅图所示,求由很多可能重叠矩形能够覆盖最终的最终图案的形状,如第二幅图所示。思路:用扫描线思想, 从左往右扫描,另外加上一个最大堆来维护满足条件的所有矩形里的高度的最高值。另外实现的时候有一些小细节很巧妙。c++和python里对元组的排序,默认都是从低位从小大大排序。时间复杂度: (nlogn)代码:class Solution: de...原创 2020-02-22 19:28:45 · 384 阅读 · 1 评论 -
leetcode 174 周赛题解
1337. 方阵中战斗力最弱的 K 行题意:返回二维数组,每行1个数的排序。pythonclass Solution: def kWeakestRows(self, mat, k) : ans = [[sum(line), i] for i , line in enumerate(mat)] ans.sort(key = lambda x:x[0]...原创 2020-02-18 00:27:48 · 327 阅读 · 0 评论 -
leetcode 176 周赛
5340. 统计有序矩阵中的负数题意:统计二维矩阵中非负个数。代码:class Solution: def countNegatives(self, grid: List[List[int]]) -> int: ans =0 for row in grid: for num in row: ...原创 2020-02-17 22:26:39 · 293 阅读 · 0 评论 -
python【heapq】&& leetcode 23. Merge k Sorted Lists
heapq模块heapq 模块是python里用来实现 ——最小堆 ,又被称为优先队列算法,官方文档。最近用python刷leetcode用的比较多,用一些例子做个笔记。创建堆 - 最小堆单个添加创建堆 - heappushimport heapqdata = [1,5,3,2,8,5]heap = []for n in data: heapq.heappush(hea...原创 2020-02-17 15:38:42 · 359 阅读 · 0 评论 -
Leetcode 1345. 跳跃游戏 IV
Leetcode 1345. 跳跃游戏 IV题意:给一个一维的数组,你从下标0开始出发,有三种操作:每次可以向左,右移动一位,或者移动到与自己数值相同的位置。思路:这类搜索求最短步数的解法是典型的bfs,注意这题数据的特殊性,裸bfs会超时。这是因为第三个操作枚举所有相同数值的位置时候,如果出现很多相同值的数值,时间复杂度会近似O(n)。这一步枚举,可以把连续出现相同值的区间只保留左...原创 2020-02-15 22:10:51 · 542 阅读 · 0 评论 -
Leetcode 76:最小覆盖子串 (滑动窗口)
76. 最小覆盖子串题意:问一个思路 :代码:class Solution: def minWindow(self, s: str, t: str) -> str: i,j , ans = 0, 0 , '' import collections cnt = collections.Counter(t) n =...原创 2020-02-14 11:26:41 · 271 阅读 · 0 评论 -
leetcode 10. 正则表达式匹配 && leetcode 44 通配符匹配
leetcode 10. 正则表达式匹配题意:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。思路:这个匹配的过程实际上就是一个回溯的搜索(暴力), 如果是这个思路,难点就是这个写法,然后注意这个过程具有子结构的特点...原创 2020-02-13 15:10:05 · 192 阅读 · 0 评论 -
leetcode1044. 最长重复子串 (Rabin-Karp + 二分 )
leetcode1044. 最长重复子串class Solution: def maxProduct(self, root: TreeNode) -> int: def get_sum(root): if not root: return 0 ret=root.val+get_sum(r...原创 2020-02-06 23:01:48 · 572 阅读 · 0 评论 -
leetcode 168 周赛题解
1295. 统计位数为偶数的数字简洁(优美)写法:class Solution: def findNumbers(self, nums) -> int: return sum(1 if len(str(num))%2 == 0 else 0 for num in nums)啰嗦的写法:class Solution: def findNumbers(s...原创 2020-02-14 11:35:15 · 303 阅读 · 0 评论 -
leetcode 167周赛题解
二进制链表转整数代码:class Solution: def getDecimalValue(self, head): ans = 0 while head !=None: ans = ans* 2 + head.val head = head.next return ans顺次数代码...原创 2019-12-15 22:50:05 · 249 阅读 · 0 评论 -
leetcode 160周赛题解
题目1题意:第一次看,没看懂,就是调一个函数,找出符合它的解。思路:这题是考阅读理解能力。代码:class Solution {public: vector<vector<int>> findSolution(CustomFunction& customfunction, int z) { vector<vector<...原创 2019-11-01 21:24:58 · 231 阅读 · 0 评论 -
leetcode 159周赛题解
题目1题意给出二维平面n个点,问是否全部在一条直线上?思路根据已知两点(x1,y1),(x2,y2)的直线公式: (y-y1)/(y2-y1)=(x-x1)/(x2-x1)代码class Solution {public: bool checkStraightLine(vector<vector<int>>& coordinates) { ...原创 2019-10-25 10:58:25 · 329 阅读 · 0 评论 -
hiho一下 第263周 小Hi和小Ho的礼物描述 hiho1505
题意:从N(N<=1000)个数里找四元组(i, j, p, q)满足i, j, p, q两两不同,并且i < j, p < q, Ai + Aj = Ap + Aq的数量。思路:计数 + 容斥原理:从N的范围,这题的解法必须是O(n^2) 附近的解法。我们可以思考遍历i,j时候,能不能O(1)知道A[i]+A[j]=x的对数呢?是可以的,预处理出num[A[i]],s...原创 2019-07-19 22:00:41 · 288 阅读 · 0 评论 -
hiho一下 第252周 1479 一面砖墙
题面 :网址题意:一共有N层砖的平面,每一层砖块数宽度不定,问穿过这个平面直线与最小砖相交数量,从两块砖缝之间划过,不算相交。思路:统计每行宽度的前缀和出现次数,出现数量cnt最多的位置就是满足题意的位置,输出N-cnt就是结果。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;m...原创 2019-05-01 10:55:55 · 214 阅读 · 0 评论 -
hiho一下 第240周 出勤记录II
题面 :Link题意:长度为n的只含有O,A,L序列,满足不能有连续三个L,最多一个A的要求的序列数量?思路:基础dp,设dp[i][j][k][l]表示长度为i序列;j用0,1,2来区分结尾为O,L,A;k用0,1,2表示连续出现几次L;l用0,1来区分A是否出现过。状态转移方程就很容易写出。貌似只用三维就可以表示,我写复杂呢…代码#include<bits/stdc++.h...原创 2019-02-21 10:27:48 · 193 阅读 · 0 评论 -
hiho一下 第241周 1483 区间价值
题面 :Link题意:n个数,他们相同的数的次数就是区间的价值,求n个数价值第k大区间的价值是?思路:最暴力求出n*(n+1)/2区间不同的值,然后排序求第k大的值,明显TLE。我们先分析发现区间越大,价值肯定越大,并且呈单调性。我们就可以用二分去查找第k大的值。对于每次二分的check,这里利用尺取的思想,尺取从左往右扫一遍最大区间[L,R]里的价值都是小于二分的mid,O(n)时...原创 2019-02-16 10:22:43 · 305 阅读 · 0 评论 -
hiho一下 第233周 数组分拆
题面 :Link题意:将一个数组拆成n个不为0的小段,问拆分的方法数。思路:开始很容易直接想到一个O(n^2) 的动态规划。令dp[i]表示i个数不同种划分数,sum[j,i]表示数组下标从j到i的和。从划分思想,比较容易想到:dp[i]=∑dp[j] (j<i&&sum[j,i]!=0)其中sum[j,i]可以由前缀数组O(1)的得到,具体见下面代码。但...原创 2018-12-17 21:45:33 · 202 阅读 · 0 评论 -
hiho一下 第228周 Parentheses Matching
题意输出所有类似()()括号匹配下标。思路经典的栈问题。代码#include&lt;bits/stdc++.h&gt;using namespace std;struct node{ int s,e;};bool cmp(node a,node b){ return a.s &lt;b.s;}vector&lt;node&gt;ans;int main(){原创 2018-11-14 21:11:21 · 224 阅读 · 0 评论 -
LeetCode 151. Reverse Words in a String
题意:输入一行多个字符串,每个字符串用多个空格隔开,将它们反序输出,两个之间只有一个空格(消除多余空格)。思路:模拟,写法不太好。插曲:可能太久没写c++,没注意到这题类里函数引用符号,我以为也是把结果输出就行,然后用正确代码调试半个小时…..引用就是可以直接将形参处理成结果就行,谁让c++这么霸(牛)道(×)可以直接将参数与内存一一对应起来。class Solution {publ...原创 2018-09-12 20:48:53 · 113 阅读 · 0 评论 -
每周一题 LeetCode 8. String to Integer (atoi)
前言:鉴于目前找工作之艰辛,感觉面试时代码功底(写题目)不能丢,遂开刷leetcode,先从middlle难度开始吧。思路:很水模拟,最大难度是英文题面吧(逃)。class Solution {public: int myAtoi(string str) { long long maxx = (1&amp;amp;lt;&amp;amp;lt;31)-1,minn = -(1&amp;amp;lt;&amp;a原创 2018-09-08 19:25:57 · 167 阅读 · 0 评论 -
hiho一下 第220周 Push Button I
题意:输入一个n,输出一个带有‘-’分组意味的全排列。注意输出序列是严格每个区域递增,并且12-34 和 12-43是等价的。题目链接样例:样例输入3样例输出1-2-31-231-3-212-312313-22-1-32-132-3-123-13-1-23-123-2-1思路:明显是一个需要修改搜索策略的搜索(暴力)问题。从12-34 和 12-43等...原创 2018-09-23 21:44:31 · 212 阅读 · 0 评论 -
hiho一下第226周《Ctrl-C Ctrl-V》
题意:题目链接思路:看完题意应该很快反应典型dp题目,但数据太大,一定有什么递推式转换成公式的规律。所以先想出一个O(n^2)的动态规划做法,打一个表再找规律。dp[i]表示i个操作最多a,分析一下发现最优解最后一步要么是直接a,要么是连续的cltr-v转移过来。j表示连续j个cltr-v操作后。所以 dp[i] = max(dp[i-1]+1,dp[i-j-2] *(j+1))打...原创 2018-10-30 20:11:00 · 201 阅读 · 2 评论 -
hiho一下 第221周 Push Button II
题意:上一周Pushbutton I题目链接 修改版,输入n范围变成1000,问满足条件的数量,不要求输出搜索过程。那么这题从搜索题变成常见动态规划问题。定义dp[i][j]表示i个数分成j组的数量。递推式是什么呢?简单思考一下:举例 dp[3][2]情况有 : 可以从dp[2][1] :1 2加一个分组 3成为1 2 -3或者dp[2][2]: 1-2 or 2-1加入3 成为 1-23 ...原创 2018-09-23 22:55:26 · 548 阅读 · 0 评论 -
Leetcode 910. Smallest Range II
题意:对n(1&amp;lt;=n&amp;lt;=10000)个数的数组每个数有任意两种操作 +Kor-K,问最后得到这个新数组里最大值减去最小值的最小可能是?思路:开始看到最小可能还以为二分(误),后来想枚举一下就可以。最暴力做法每一位两种可能2^n显然不行,我们在考虑不用枚举那么多信息,我们只要知道(枚举)最后得到新数组里最大值和最小值可能情况。于是我们先排个序,思考每一位A[i]+K之后都可能是新数...原创 2018-10-03 11:10:10 · 346 阅读 · 0 评论 -
hiho一下 第222周 Big Plus
题面 :Link题意:很简单,直接看图。思路:开始以为一个dfs暴力莽过,看讨论利用前缀和思想,先预处理每一点向四个方向有最多多少个连续点,取最小值即答案。具体见代码!代码#include&lt;bits/stdc++.h&gt;using namespace std;const int maxn = 500+50;int n,mat[maxn][maxn];int Up[max...原创 2018-10-03 11:19:42 · 213 阅读 · 0 评论 -
hiho一下 第223周 Interval Coverage
题面 :Link题意:先给你一个大区间,和一些小区间,问最少的小区间个数覆盖掉大区间。思路:很典型贪心。代码#include<bits/stdc++.h>using namespace std;struct node{ int s,t;}a[100000+10];bool cmp(node a,node b){ return a.s == b.s ?...原创 2018-10-10 21:47:32 · 151 阅读 · 0 评论 -
hiho一下 第224周 Split Array
题面 :Link题意:给你一个有n个数递增序列,问能不能分成若干由k个数组成的连续递增序列。思路:很典型贪心。代码#include<bits/stdc++.h>using namespace std;int a[50000+10];int main(){ int T; scanf("%d",&T); while(T--){ int...原创 2018-10-16 01:02:25 · 149 阅读 · 0 评论 -
hiho一下 第225周 Inside Triangle
题意:在一个平面里,判断一个点在不在三角形里,注意在三角形某一边上也算在内。思路:如何判断一个点是否在三角形内呢? 将p点与三个点任意两个相连形成三个小三角形面积之和等于原三角形。注意:由于浮点计算结果考虑精度问题,测试一下0.1就能通过所有数据。#include<bits/stdc++.h>using namespace std;int a[50000+10];struc...原创 2018-10-22 20:51:58 · 195 阅读 · 0 评论