在线编程
愤怒的可乐
主要研究NLP、深度学习、大模型。添加微信:greyfoss_szu 一起交流~,添加时请备注CSND。
展开
-
LeetCode刷题——3. 无重复字符的最长子串
题目思路也是通过滑动窗口的思路,固定左端,移动右端;再移动左端。代码class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ size = len(s) l,r = 0,-1 # [l,r]子串 longest = 0 cur =原创 2021-02-28 15:54:38 · 263 阅读 · 1 评论 -
LeetCode刷题——209. 长度最小的子数组
题目思路可以利用滑动窗口的思路来解决此问题,即就像一个滑动的窗口,套在一个序列中,左右的滑动,根据窗口内的子序列进行判断。本题先固定数字左端元素,然后右端元素不断右移,直到该子数组满足题意。然后将左端元素右移一个位置,继续此过程。代码class Solution(object): def minSubArrayLen(self, target, nums): """ :type target: int :type nums: List[in原创 2021-02-28 15:18:53 · 249 阅读 · 1 评论 -
LeetCode刷题——11. 盛最多水的容器
题目思路两条垂线,根据短板效应,能盛水的高度是最短的那条垂线,同时,长是两条垂线下标之差。两条垂线,出现数字2,可以考虑碰撞指针。代码class Solution(object): def maxArea(self, height): """ :type height: List[int] :rtype: int """ max_area = 0 i,j = 0,len(height) -1原创 2021-02-26 23:52:00 · 207 阅读 · 0 评论 -
LeetCode刷题——345. 反转字符串中的元音字母
题目思路做这个题需要先知道aeiou就是元音字母。和反转字符串类似,元音字母才需要反转。代码class Solution(object): def reverseVowels(self, s): """ :type s: str :rtype: str """ # print(type(s)) # <type 'unicode'> cs = 'aeiouAEIOU' # 要考虑大小写原创 2021-02-26 23:47:49 · 296 阅读 · 0 评论 -
LeetCode刷题——344. 反转字符串
题目思路反转字符串,不能利用库函数。也可以利用碰撞指针的方式,两个指针的值互换位置。代码class Solution(object): def reverseString(self, s): """ :type s: List[str] :rtype: None Do not return anything, modify s in-place instead. """ i,j = 0,len(s)-1原创 2021-02-26 23:42:51 · 216 阅读 · 0 评论 -
LeetCode刷题——125. 验证回文串
题目思路回文就是从左往右阅读,和从右往左阅读得到的字符串是相等的。题目说只考虑数字和字母,刚好python中有个函数isalnum()可以判断。然后可以利用双指针,判断符号条件的两个指针所在元素是否相等,直到碰撞为止(返回True),或者不相等(返回False)。代码class Solution(object): def isPalindrome(self, s): """ :type s: str :rtype: bool原创 2021-02-26 23:39:45 · 212 阅读 · 0 评论 -
LeetCode刷题——167. 两数之和 II - 输入有序数组
题目思路最简单的方法是两个循环的暴力解法。但是过不了,会报超时。有一点要注意的是,返回的数组索引要加1,因为题目说数组下标从1开始。解法一利用数组的有序性,可以很容易想到二分搜索。那么可以通过一次遍历+二分搜索的方法解决。class Solution(object): def twoSum(self, numbers, target): """ :type numbers: List[int] :type target: int原创 2021-02-26 23:34:27 · 277 阅读 · 3 评论 -
LeetCode刷题——88. 合并两个有序数组
题目思路显然考察的是归并排序算法的核心:归并操作的熟练度。代码class Solution(object): def merge(self, nums1, m, nums2, n): """ :type nums1: List[int] :type m: int :type nums2: List[int] :type n: int :rtype: None Do not return anyt原创 2021-02-18 11:34:27 · 266 阅读 · 0 评论 -
LeetCode刷题——75. 颜色分类
题目解法一不就是排序吗,这是我见过最简单的题目哈哈。class Solution(object): def sortColors(self, nums): """ :type nums: List[int] :rtype: None Do not return anything, modify nums in-place instead. """ return nums.sort()结果还不错,平常碰到这种原创 2021-02-18 11:05:26 · 236 阅读 · 0 评论 -
LeetCode刷题——80. 删除排序数组中的重复项 II
题目思路是题目26. 删除排序数组中的重复项的升级版,条件是删除重复元素,但每个元素最多重复两次。总体代码是类似的,这里需要额外一个变量来保存是否重复了两次。代码class Solution(object): def removeDuplicates(self, nums): """ :type nums: List[int] :rtype: int """ size = len(nums)原创 2021-02-17 11:30:49 · 242 阅读 · 0 评论 -
LeetCode刷题——26. 删除排序数组中的重复项
题目思路和283. 移动零类似,也是删除元素。不过这里删除的是重复元素,也只需遍历一次,比较前后两个元素是否重复即可。代码class Solution(object): def removeDuplicates(self, nums): """ :type nums: List[int] :rtype: int """ size = len(nums) i = 1 #i指向下一个元素原创 2021-02-17 11:13:35 · 256 阅读 · 0 评论 -
LeetCode刷题——283. 移动零
题目解法解法一题目要求只能原地操作。简单的,用两个循环,一个遍历所有元素,找到零元素;另一个遍历非零元素,交换。class Solution(object): def moveZeroes(self, nums): """ :type nums: List[int] :rtype: None Do not return anything, modify nums in-place instead. """ f原创 2021-02-17 10:50:31 · 244 阅读 · 0 评论 -
LeetCode刷题——392. 判断子序列
题目给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例 1:s = "abc", t = "ahbgdc"返回 true.示例 2:s = "axc", t = "ahb原创 2020-09-08 22:02:59 · 624 阅读 · 0 评论 -
LeetCode刷题——455. 分发饼干
题目假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个小朋友最多只能拥有一块饼干。示例 1:输入: [1,2,3], [1,1]输出: 1解释: 你原创 2020-09-08 21:10:52 · 493 阅读 · 0 评论 -
LeetCode刷题——63. 不同路径 II
题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 1:输入:[ [0,0,0], [0,1,0], [0,0,0]]输出: 2解释:3x3 网格的正中间有一个障碍物。从原创 2020-05-09 17:56:01 · 485 阅读 · 5 评论 -
LeetCode刷题——62. 不同路径
题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向右 -> 向下2. 向右 -> 向下 -> 向右3. 向下 -&g原创 2020-05-09 16:10:28 · 853 阅读 · 6 评论 -
LeetCode刷题——91. 解码方法
题目一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: "12"输出: 2解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。示例 2:输入: "226"输出: 3解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。来源:力扣(LeetCode)链接:https:/原创 2020-05-09 09:43:52 · 595 阅读 · 2 评论 -
LeetCode刷题——279. 完全平方数
题目给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4.示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9.来源:力扣(LeetCode)链接:https://leetcode-c...原创 2020-05-07 14:07:59 · 638 阅读 · 2 评论 -
LeetCode刷题——343. 整数拆分
题目给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。示例 2: 输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。来源:力扣(...原创 2020-05-06 18:48:22 · 1147 阅读 · 2 评论 -
LeetCode刷题——64. 最小路径和
题目给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小来源:力扣(LeetCode)链接:https://leetcode-cn.com/proble...原创 2020-05-06 11:53:16 · 581 阅读 · 0 评论 -
LeetCode刷题——120. 三角形最小路径和
题目给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。说明:如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。来源:...原创 2020-05-04 21:46:51 · 438 阅读 · 0 评论 -
LeetCode刷题之动态规划思想
动态规划动态规划思想:将原问题拆解成若干子问题,同时保存子问题的答案,使得每个子问题只求解一次,最终获得原问题的答案。求解思路大多数动态规划问题都是一个递归问题;在递归的过程中会发现很多重叠子问题(出现重复计算子问题的情况);可以使用记忆化搜索的方式来解决问题;通常解决动态规划问题时,先自顶向下的思考问题,最后再通过自底向上的动态规划解决问题。在动态规划中都是通过这种思路来解决...原创 2020-05-02 08:24:06 · 2473 阅读 · 3 评论 -
LeetCode刷题——70. 爬楼梯
题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 ...原创 2020-05-01 22:06:52 · 619 阅读 · 2 评论 -
LeetCode刷题——除数博弈
题目爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:选出任一 x,满足 0 < x < N 且 N % x == 0 。用 N - x 替换黑板上的数字 N 。如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩家都以最佳状态参...原创 2020-04-30 18:00:08 · 1623 阅读 · 1 评论 -
编写一个算法来判断一个数 n 是不是快乐数
题目描述「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 100...原创 2020-04-30 17:35:21 · 3328 阅读 · 1 评论 -
把字符串转换为整数
题目描述将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。解题思路首先判断第一位数字是不是符号,然后计算每一位的值,同时要考虑溢出的情况(分为正数的溢出和负数的溢出)代码 public static in...原创 2018-07-19 10:48:38 · 2009 阅读 · 0 评论 -
字符流中第一个不重复的字符
题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。解题思路如果要在一次循环统计某个字符出现的次数,想到的是通过Map; 同时要记录插入顺序,想到的是LinkedHashMap因此,通过LinkedHashMa...原创 2018-07-18 13:25:31 · 267 阅读 · 0 评论 -
栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路判断是否是弹出序列,用一个栈作为辅助就特别方便了代码...原创 2018-07-17 18:35:43 · 229 阅读 · 0 评论 -
判断链表是否有环
思路两个指针p,q;p每次走1步,q每次走2步 如果链表有环,p,q必能相遇 因为q快一些,q会先达到链表尾部代码public boolean hasCycle(ListNode head) { ListNode p = head,q = head; //q快一些,只需要判断q不为空即可 //q要想走2步,也需判断q.next...原创 2018-07-16 18:51:04 · 303 阅读 · 0 评论 -
合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路创建两个节点,一个指向新链表的头结点;一个用于遍历插入新节点通过创建哨兵节点可以省去构造新链表时对两个链表头结点谁大谁小的判断并且下面的代码也不需要进行参数list1和list2的非空验证代码 public static ListNode Mer...原创 2018-07-16 18:31:15 · 244 阅读 · 0 评论 -
删除链表中重复的节点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5解题思路需求两个指针pre,q以及头节点指针,这里直接用参数里面的pHead即可 q用来判断是否有重复节点以及移除重复节点 然后用pre指向q.next...原创 2018-07-16 16:50:39 · 286 阅读 · 0 评论 -
输入一个链表,输出该链表中倒数第k个结点
解题思路/** * 两个指针p1,p2,开始都指向头结点 * 先让p2走k步 * 然后p1,p2同时向下走 * 当p2指向null的时候,p1就是倒数第k个节点 */代码/*class ListNode { int val; ListNode next = null; ListNode(int val) { this.v...原创 2018-07-16 10:55:15 · 5684 阅读 · 0 评论