
leetcode
我是小飞猪
小飞猪飞飞飞\n
小肥猪肥肥肥\n
小爪猪biubiubiu\n
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
环形数组循环
给定一个含有正整数和负整数的环形数组 nums。 如果某个索引中的数 k 为正数,则向前移动 k 个索引。相反,如果是负数 (-k),则向后移动 k 个索引。因为数组是环形的,所以可以假设最后一个元素的下一个元素是第一个元素,而第一个元素的前一个元素是最后一个元素。确定 nums 中是否存在循环(或周期)。循环必须在相同的索引处开始和结束并且循环长度 > 1。此外,一个循环中的所有运动都必须沿着同一方向进行。换句话说,一个循环中不能同时包括向前的运动和向后的运动。示例 1:输入:[2,-1,1,原创 2020-07-26 10:32:52 · 545 阅读 · 0 评论 -
矩阵的对角遍历-建树层次遍历解法
一个二维矩阵要实现对角遍历:这个方法不一定是最快的,因为建树和复制的过程比较多。其中关键的地方就是:如何建树 和 如何左右层次遍历如何建树:1) 每个位置只能使用一次 2)建树其中一种方式:第一排均有左右孩子,其他仅有左孩子(也有其他方法,随你怎么建树)如何左右层次遍历:一般的层次遍历仅为左分支先进或者右分支先进,可以再两层交换时,设定方向标识符,来交换方向代码如下:import itertoolsfrom enum import Enumclass MatrixTreeNode:原创 2020-06-29 12:30:17 · 2902 阅读 · 0 评论 -
leetcode 419. 甲板上的战舰
要求以此遍历并且不修改原数组的条件下:每个战舰不相邻,正常情况下,我们找到头部,然后向下或者向右比哪里数组,修改数组,去除战舰,然后遍历下一个。发现,只需要遍历发现头部即可,最左边或者最上边X就是一个战舰。如果此刻位置的上边或者左边是X,则是战舰的中部。//419.int countBattleships(vector<vector<char>>& board) { const int n = board.size(); if (n == 0)return 0原创 2020-06-13 21:31:04 · 238 阅读 · 0 评论 -
leetcode 452
leetcode 452452. 用最少数量的箭引爆气球在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。原创 2020-05-13 23:35:08 · 491 阅读 · 0 评论 -
leetcode 437. 路径总和 III
思想:树的遍历:选用中序遍历记录下从下到上的路径和,包括从非节点开始如何记录从非叶节点开始,向上传递的过程中,将自身节点也向上传递。如何记录路径和:将自身节点的值,加上左右子树传递过的列表的值,最后加上自身的值,并向上传递遍历过程中,记录一共有多少个和为sum# Definition for a binary tree node.# class TreeNode:# d...原创 2020-03-28 11:30:19 · 179 阅读 · 0 评论 -
leetcode 19. 删除链表的倒数第N个节点
快慢指针,设两个指针:右指针先走n步左指针随着右指针一起移动,直到右指针的下一个节点为空。删除左值针指向的下一个节点# Definit1ion for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = None...原创 2020-03-28 10:05:13 · 103 阅读 · 0 评论 -
leetcode 18. 四数之和
进行搜索就可以。思路与前面类似题一样。class Solution: def fourSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[List[int]] """ ...原创 2020-03-28 09:53:44 · 99 阅读 · 0 评论 -
leetcode 17. 电话号码的字母组合
做一个字典映射,找出数字对应的字母进行组合就可以就很简单了。class Solution: def letterCombinations(self, digits): """ :type digits: str :rtype: List[str] """ import itertools N2...原创 2020-03-28 09:47:21 · 106 阅读 · 0 评论 -
leetcode 16. 最接近的三数之和
思想同leetcode 15.只不过结果保留方式(保留绝对值最小的值)不一样。class Solution:def threeSumClosest(self, nums, target):“”":type nums: List[int]:type target: int:rtype: int“”"nums.sort()argmin = 1000000result = []fo...原创 2020-03-28 09:05:08 · 139 阅读 · 0 评论 -
leetcode 15. 三数之和
先对数组升序排列找三个数之和,我们首先指定一个数,然后对其他两个数进行查找使用二分查找对其他两数进行查找,并使用目前三数之和作为查找条件 def threeSum(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ re...原创 2020-03-28 09:00:24 · 104 阅读 · 0 评论 -
leetcode 14. 最长公共前缀
每个字符串的前缀相同对所有字符串的相同位置进行比较,用set集合来完成所有相同位置的集合,set集合大小为1,表示此位字符相同,都则不同,比较中止.class Solution: def longestCommonPrefix(self, strs): """ :type strs: List[str] :rtype: str ...原创 2020-03-28 08:53:12 · 86 阅读 · 0 评论 -
letcode 3. 罗马数字转整数
向右扫描,如果对应的字母代表的值小于右边的,则执行机减法,比如:IV,先减一再加5,结果为4。class Solution: def romanToInt(self, s): """ :type s: str :rtype: int """ R = {'I': 1, 'V': 5, 'X': 10, 'L':...原创 2020-03-28 08:45:13 · 109 阅读 · 0 评论 -
leetcode 12. 整数转罗马数字
对每个位上进行取整, 按照对应的索引值进行输出即可。class Solution: def intToRoman(self, num): """ :type num: int :rtype: str """ I = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', ...原创 2020-03-28 08:40:28 · 100 阅读 · 0 评论 -
441. 排列硬币
阶梯排列,输出能够最后能完整排的一行行号递减直到n<0为止,逻辑比较简单方法二:数学公式:设第x行为最后满输出(x+1)* x / 2 = n ,最后将x取整即可 def arrangeCoins(self, n: int) -> int: return int(math.sqrt(1/4.0 + 2*n)-1/2)...原创 2020-03-27 20:05:44 · 163 阅读 · 0 评论 -
leetcode434.单词数目
想法肯定是对空格进行分词做分词之前,必须处理头尾空格和重复空格 # 434 def countSegments(self, s: str) -> int: import re s = re.sub("[\s]+", ' ', s.strip()) if s == ' ' or len(s) == 0: ...原创 2020-03-27 19:48:24 · 201 阅读 · 0 评论 -
leetcode 3
尽可能分成更多的3如果剩下1,则拿出一个3,变成4,则分成2*2如果剩下2,则2不在分class Solution {public: int integerBreak(int n) { if(n<=3)return n-1; int a = n/3, b = n%3; if(b==0) return pow(3, a); ...原创 2020-03-27 18:49:46 · 117 阅读 · 0 评论 -
leetcode 11. 盛最多水的容器
思路:左右两个索引向中间移动即可,小值的索引的向中间移动class Solution: def maxArea(self, height): """ :type height: List[int] :rtype: int """ i, j, maxarea, current = 0, len(height)...原创 2020-03-27 18:51:34 · 127 阅读 · 0 评论 -
leetcode 10. 正则表达式匹配
Python:不说了刷题真鸡儿方便,全匹配即可真是的算法:用DFA就可以(Leetcode 后面又一题也是字符串匹配,需要写到DNA很便捷)class Solution: def isMatch(self, s, p): """ :type s: str :type p: str :rtype: bool ...原创 2020-03-27 16:10:09 · 153 阅读 · 0 评论 -
leetcode 9. 回文数
不说了:判断回文Python无比方便class Solution: def isPalindrome(self, x): """ :type x: int :rtype: bool """ return str(x) == str(x)[::-1] ...原创 2020-03-27 16:07:36 · 146 阅读 · 0 评论 -
leetcode 8. 字符串转换整数 (atoi)
思路:正则从头开始匹配就好class Solution: def myAtoi(a,str): """ convert str to an interger :type str: str :rtype: int """ impo...原创 2020-03-27 16:05:29 · 102 阅读 · 0 评论 -
leetcode 7.整数反转
简单,stl库用起来即可class Solution {public: long long reverse(long long x) { int flag = x >= 0?1:-1; x = abs(x); string temp = to_string(x); std::reverse(temp.begin(), temp.end...原创 2020-03-27 16:01:40 · 130 阅读 · 0 评论 -
leetcode 6. Z 字形变换
这一题没啥好说的,移动就行了class Solution {public: //6. string convert(string s, int numRows) { // flag :向下移动 row++ // flag :向右上移动 if (numRows <= 1)return s; int x = -1, y=-1; vector&l...原创 2020-03-27 16:00:23 · 105 阅读 · 0 评论 -
leetcode 5. 最长回文子串
思路:判断局部回文串记录最大长度,从所i你0开始,每一次向后移动一次,检测目前最大长度内是否回文这一题还可以用 二维数组来做。class Solution {public: // 判断是否回文串 bool Palindrome(const string& s){ int i = 0, j = s.size() - 1; while (i <=...原创 2020-03-27 15:52:44 · 91 阅读 · 0 评论 -
leetcode 4. 寻找两个有序数组的中位数
思路:合并排序取中位数class Solution {public: //4. double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int size = nums1.size() + nums2.size(); vector<int&g...原创 2020-03-27 15:49:25 · 109 阅读 · 0 评论 -
leetcode 3. 无重复字符的最长子串
思路:检测重复字符,用字典来记录字符是否出现过,并且记录位置最大索引使用 j 向右移动,并在字典中记录字符索引遇见重复字符,则i记录字符的最大索引位置,i,j之间的字符是无重复的,计算长度(取最大值)static int x = []() { ios::sync_with_stdio(false); cin.tie(NULL); return 0;}();class Solu...原创 2020-03-27 15:47:58 · 92 阅读 · 0 评论 -
leetcode 2.两数相加
思路:数字相加,必须设置进位标志进行加法逻辑与进位即可处理最短链完成时,再一次处理进位操作/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {}...原创 2020-03-27 15:43:53 · 83 阅读 · 0 评论 -
leetcode 1. 两数之和
思路:查找两次即可class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> result; for (int i = 0; i < nums.size(); i++) { vector<in...原创 2020-03-27 15:41:14 · 96 阅读 · 0 评论 -
leetcode 400. 第N个数字
def findNthDigit(self, n: int) -> int: ''' 1. 确定所要求的数字在哪个10的幂空间:比如 n=13处于[10,100)的空间内 2. 规律:每一个10的幂空间有规律的,1-9为10-1,10-99为(100-10)*2 100-999为(1000-100)*3 .......原创 2020-03-27 11:44:55 · 193 阅读 · 0 评论 -
423. 从英文中重建数字
从英文中重建数字思路 :观察每个数字的英文,找出数量决定性的字母,首先判断对应的数字个数进而继续推理其他数字:比如我们可以从u决定four的数量,从而可以推理决定five的数量,进而可以根据v来决定seven,其他数字推理逻辑类似。注意:nine中又两个n,最后进行9的推理是,要整除2class Solution: def DeterNums(self, index, A...原创 2020-03-26 10:19:53 · 179 阅读 · 0 评论 -
leetcode 417. 太平洋大西洋水流问题
417.太平洋大西洋水流问题说明:本人这个属于暴力dfs方法,效率不高, 但是dfs这个方法比较好理解思想:建立已访问矩阵v和能够到达矩阵visitedvisited每个元素有两个值,第一值visited[i][j][0]表示(i,j)能够达到太平洋,第二值visited[i][j][1]表示(i,j)能够达到大西洋进行dfs搜索//417.typedef vector<v...原创 2020-03-25 10:43:00 · 107 阅读 · 0 评论 -
leetcode 415.字符串相加
字符串相加,思想就是:从低位加到高位,逢十进一如何逢十进一,设置一个标志位flag,表示进位,仅为的大小为整除10,对10的余数则为此位上的数//412.string addStrings(string num1, string num2) { int flag = 0; if (num1.size() < num2.size()) swap(num1, num2); ...原创 2020-03-12 12:07:33 · 109 阅读 · 0 评论 -
c++之快排代码
//快排void QuicklySort(vector<int>& nums, int start, int end) { if (start + 1 >= end) return; int conindex = nums[start]; int left = start, right = end - 1; while (left < right) {...原创 2020-03-11 22:21:07 · 653 阅读 · 0 评论 -
Leetcode 414.第三大的数
这一题由两种方法:1. 快排法,直接找出第三个位置的数 2. 直接利用STL库,直接nth_element。注意:这一题所得第k大的数,表示非重复第k大,在程序执行之前需要去重。第一种方法:在快排中,我们有一个条件约束,就是每一次的对比索引如果比K(需要找的第K大数)大,则表明此数在左半部分,否则则在右半部分然后根据快排更改,写出满足约束条件的快排搜索//快排(降序)搜寻第K大的数...原创 2020-03-11 22:08:14 · 181 阅读 · 0 评论 -
Leetcode 413.等差数列划分
题目地址我们观察给出的测试用例会发现,结果中并不只是包含最长的等差数列,同样也包含长度不大于自身的子等差数列一个最长的等差数列,长度为Max Len,所包含的所有子等差数列(包含自身)是一个求和的关系,数列长度L=3的子数列有MaxLen-3个,L=MaxLen的子数列有1个,简单求和就OK。关键问题,如何找出局部(自身最长)等差数列。首先,对原数组进行前后相减处理会更容易发现等差,其次一...原创 2020-03-08 21:51:51 · 166 阅读 · 0 评论 -
412. Fizz Buzz
这是一道简单题输出:从1到n中出现3或者5的倍数才输出字符,否者直接输出数字建立一个数组标记是否为3或者5的倍数,初始全部为0,如果为3的倍数,则+1, 如果是5的倍数则+2。这样,既是3又是5的倍数标记值为3。因此:如果标记值为0,则输出该数字;标记为1输出Fizz;标记为2输出Buzz,标记值为3则输出FizzBuzz。//412.vector<string> fiz...原创 2020-03-07 11:39:18 · 173 阅读 · 0 评论 -
leetcode 410.分割数组问题
开局对天长叹----》》》》》》感叹还是大佬多方法一:DP说实话这个DP法,有时候真的难想。https://www.bilibili.com/video/av31229543?from=search&seid=14364825882116056660这里有个B站讲解链接。int splitArrayDP(vector<int>& nums, int m) ...原创 2020-03-06 20:37:26 · 161 阅读 · 0 评论 -
Leetcode407.接雨水2
思路:本人是看了B站视频才获得解答// Bzhan 视频:https:////www.bilibili.com/video/av80545040?from=search&seid=17893266060819984383木桶效应从四周向中间扩散,DFS思想在更新时需注意,更新后的位置高度为目前值和扩散位置的最大高度具体可以看视频。不细写了免得重复。//407.// Bzh...原创 2020-03-02 12:14:21 · 196 阅读 · 0 评论 -
Leetcode 406.根据身高重建队列
406. 根据身高重建队列根据身高h降序,位置k升序进行排序将新队列按照k直接插入到结果队列中//406.vector<vector<int>> reconstructQueue(vector<vector<int>>& people) { sort(people.begin(), people.end(), [](cons...原创 2020-03-01 12:19:13 · 427 阅读 · 0 评论