+ LeetCode刷题
leetcode刷题
youaresherlock
江湖人称狗哥!
展开
-
Leetcode动态规划详解(二)
接下来我们根据一个动态规划的中等题来讲解"""动态规划之国王和金矿有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要求用程序求解出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿?动态规划的三个重要概念:最优子结构、边界、状态转移公式f(8)和f(9)是f(10)的最优子结构(f(8) + f(9) = f(10))f(1)、f(2)是问题的边界,不需要计算的.f(n) =原创 2021-08-25 20:23:55 · 272 阅读 · 0 评论 -
Leetcode动态规划讲解(一)
有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。要求用程序来求出一共有多少种走法。有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。要求用程序来求出一共有多少种走法。这是通过找规律看出是递归的.0 01 121 1231 1 1122141 1 1 11 1 21 2 12 1 12 20 1 2 3 40 1 2 3 5换种思路: 动态规划的思路我们要走上第10级台阶, 最后一步肯定是从第8级或.原创 2021-08-18 20:42:27 · 177 阅读 · 0 评论 -
OJ文件目录输出
/* * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. */package corejava.v1ch05.practice;import java.nio.charset.StandardCharsets;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.u原创 2021-08-16 18:59:48 · 202 阅读 · 0 评论 -
OJ停车记录
/* * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. */package corejava.v1ch05.practice;/* * Copyright(c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved. * Note: 提供的缺省代码仅供参考,可自行根据答题需要进行使用、修改或删除。 */import原创 2021-08-16 18:59:21 · 112 阅读 · 0 评论 -
leetcode刷题Longest Substring Without Repeating Characters
leetcode address难度: 中等 额,怎么觉得中等题都是考智商,嘻嘻题目Given a string s, find the length of the longest substring without repeating characters.eg1:Input: s = “abcabcbb”Output: 3Explanation: The answer is “abc”, with the length of 3.eg2Input: s = “.原创 2021-08-16 18:58:29 · 146 阅读 · 0 评论 -
Leetcode之Add Two Numbers
leetcode address难度: 中等 我感觉是简单题目You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a link.原创 2021-08-16 18:57:53 · 132 阅读 · 0 评论 -
Leetcode单个展厅的最大参展人数优化与解说
nums = [1, 4, 2, 5, 5, 1, 6]cnt = 13nums数组表示的是每个展厅的目前参展人数,元素个数表示不同的展厅cnt表示所有展厅所有参展人数之和要满足的值给出一组nums,要判断是否参展总人数满足cnt,如果小于等于cnt,则返回-1不需要调整如果大于cnt,则需要调整参展人数,给定limit为每个展厅的参展人数,如果小于limit,则可以全部参展,如果大于等于limit,则此展厅需要参展limit个人,求最大的limit如上图,nums参展人数为.原创 2021-07-31 21:08:00 · 1213 阅读 · 4 评论 -
Leetcode字典序最小的字符串
给定一组只包含小写字母和’#‘的字符串, 求替换’#'之后字典序最小的字符串如给出"m#efy###am", 第一个’#‘可以用a代替,因为它和m与e都不重复, 第二个’#‘号可以用a代替,与y不重复,第三个’#'用b代替,因为前一个已经替换成了a.结果是maefyabcam#!/usr/bin/python# -*- coding:utf-8 -*-import stringclass Solution: @staticmethod def get_char(*.原创 2021-07-29 09:48:07 · 1018 阅读 · 0 评论 -
leetcodepython实现栈
实现栈的push、pop、top(获取栈顶元素)、pop_min(弹出最小值)#!/usr/bin/python# -*- coding:utf-8 -*-class MinStack: def __init__(self): self.stack = [] def push(self, number: int) -> None: self.stack.append(number) def pop(self) -> i.原创 2021-07-29 09:45:08 · 112 阅读 · 0 评论 -
leetcode两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/pro.原创 2021-04-01 17:14:01 · 96 阅读 · 0 评论 -
leetcode早餐组合
小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格。小扣的计划选择一份主食和一款饮料,且花费不超过 x 元。请返回小扣共有多少种购买方案。注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1address#!/usr/bin/python# -*- coding:utf-8 -*-from typing import List.原创 2021-04-01 15:33:18 · 286 阅读 · 0 评论 -
leetcode非递减数列
给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。输入: nums = [4,2,3]输出: true解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。提示:1 <= n <= 10 ^ 4- 10 ^ 5 <= nums[i] <=.原创 2021-04-01 11:25:26 · 170 阅读 · 0 评论 -
leetcode颠倒二进制位
颠倒给定的 32 位无符号整数的二进制位进阶:如果多次调用这个函数,你将如何优化你的算法?address#!/usr/bin/python# -*- coding:utf-8 -*-# 方法1def reverseBits(n: int) -> int: result = 0 for i in range(32): # 此处+优先符高于& result = (result << 1) + (n &.原创 2021-03-31 10:21:30 · 137 阅读 · 0 评论 -
leetcode和为s的连续正整数序列
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]addressfrom typing import Listclass Solution: def findContinuousSequence(self, target: int) -> List[List[int]]:.原创 2020-09-18 20:04:45 · 222 阅读 · 0 评论 -
leetcode找出给定方程的正整数解(1237)
给出一个函数 f(x, y) 和一个目标结果 z,请你计算方程 f(x,y) == z所有可能的正整数 数对 x 和 y。给定函数是严格单调的,也就是说:f(x, y) < f(x + 1, y)f(x, y) < f(x, y + 1)函数接口定义如下:interface CustomFunction {public:// Returns positive integer f(x, y) for any given positive integer x and y.i.原创 2020-09-18 19:48:51 · 281 阅读 · 0 评论 -
leetcode独一无二的次数(1207)
给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false输入:arr = [1,2,2,1,1,3]输出:true解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。addressfrom typing import Listimport collectionsdef unique_occurrences(arr: List[int]) -&.原创 2020-09-14 20:14:47 · 127 阅读 · 0 评论 -
leetcode删列造序(944)
给定由 N 个小写字母字符串组成的数组 A,其中每个字符串长度相等。你需要选出一组要删掉的列 D,对 A 执行删除操作,使 A 中剩余的每一列都是 非降序 排列的,然后请你返回 D.length 的最小可能值。删除 操作的定义是:选出一组要删掉的列,删去 A 中对应列中的所有字符,形式上,第 n 列为 [A[0][n], A[1][n], …, A[A.length-1][n]])输入:[“cba”, “daf”, “ghi”]输出:1解释:当选择 D = {1},删除后 A 的列为:.原创 2020-09-13 19:30:56 · 162 阅读 · 0 评论 -
leetcode键盘行(500)
给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。输入: [“Hello”, “Alaska”, “Dad”, “Peace”]输出: [“Alaska”, “Dad”]注意:你可以重复使用键盘上同一字符。你可以假设输入的字符串将只包含字母。addressfrom typing import Listdef find_words(words: List[str]) -> List[str]: line1 = ['q', 'w.原创 2020-09-13 19:15:53 · 172 阅读 · 0 评论 -
leetcode只出现一次的数字(136)
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。输入: [2,2,1]输出: 1addressfrom typing import Listdef single_number(nums: List[int]) -> int: # 1. 位运算 利用相同数字的异或为0,0和任意数异或为任意数 # res = nums[0] # for i in range(1, len(nums)): #.原创 2020-09-11 20:24:48 · 89 阅读 · 0 评论 -
leetcode移除重复节点
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]address# Definition for singly-linked list.class ListNode: def __init__(self, x): self.val = x self.next = Noneclass Solution: def removeDuplicateNodes(se.原创 2020-09-11 20:04:35 · 161 阅读 · 0 评论 -
leetcode存在连续三个奇数的数组(1550)
给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true ;否则,返回 false 。输入:arr = [2,6,4,1]输出:false解释:不存在连续三个元素都是奇数的情况。addressfrom typing import Listdef three_consecutive_odds(arr: List[int]) -> bool: # 1. 计数法 # count = 0 # for numb.原创 2020-09-11 19:47:04 · 193 阅读 · 0 评论 -
leetcode893特殊等价字符串组(893)
你将得到一个字符串数组 A。每次移动都可以交换 S 的任意两个偶数下标的字符或任意两个奇数下标的字符。如果经过任意次数的移动,S == T,那么两个字符串 S 和 T 是 特殊等价 的。例如,S = “zzxy” 和 T = “xyzz” 是一对特殊等价字符串,因为可以先交换 S[0] 和 S[2],然后交换 S[1]和 S[3],使得 “zzxy” -> “xzzy” -> “xyzz” 。现在规定,A 的 一组特殊等价字符串 就是 A 的一个同时满足下述条件的非空子集:该组中的.原创 2020-09-10 10:46:31 · 289 阅读 · 0 评论 -
leetcodeN叉树的最大深度(559)
给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。address对于二叉树来说,是这个题address# Definition for a Node.class Node: def __init__(self, val=None, children=None): self.val = val self.children = childrenclass Solution: def maxD.原创 2020-09-10 10:26:25 · 208 阅读 · 0 评论 -
leetcode反转链表(206)
反转一个单链表。输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULLaddress# Definition for singly-linked list.class ListNode: def __init__(self, x): self.val = x self.next = Nonedef reverse_list(head: ListN.原创 2020-09-09 19:21:58 · 110 阅读 · 0 评论 -
leetcode两个数组的交集(349)
给定两个数组,编写一个函数来计算它们的交集。输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]addressfrom typing import Listclass Solution: def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]: # return list(set(nums1) & set(nums2)) .原创 2020-09-08 20:13:59 · 144 阅读 · 0 评论 -
leetcode矩阵中的幸运数(1380)
给你一个 m * n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。幸运数是指矩阵中满足同时下列两个条件的元素:在同一行的所有元素中最小在同一列的所有元素中最大输入:matrix = [[3,7,8],[9,11,13],[15,16,17]]输出:[15]解释:15 是唯一的幸运数,因为它是其所在行中的最小值,也是所在列中的最大值。提示: 元素不唯一addressfrom typing import Listdef lucky_numb.原创 2020-09-08 20:05:31 · 232 阅读 · 0 评论 -
leetcode两个数组间的距离(1385)
给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 。「距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足 |arr1[i]-arr2[j]| <= d 。输入:arr1 = [4,5,8], arr2 = [10,9,1,8], d = 2输出:2解释:对于 arr1[0]=4 我们有:|4-10|=6 > d=2|4-9|=5 > d=2|4-1|=3 > d=.原创 2020-09-08 19:20:59 · 216 阅读 · 0 评论 -
leetcode山脉数组的顶峰索引(852)
我们把符合下列属性的数组 A 称作山脉:A.length >= 3存在 0 < i < A.length - 1 使得A[0] < A[1] < … A[i-1] < A[i] >A[i+1] > … > A[A.length - 1]给定一个确定为山脉的数组,返回任何满足 A[0] < A[1] < … A[i-1] <A[i] > A[i+1] > … > A[A.length - 1] 的 i 的值。.原创 2020-09-07 17:48:04 · 177 阅读 · 0 评论 -
leetcode化栈为队列
实现一个MyQueue类,该类用两个栈来实现一个队列。MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.pop(); // 返回 1queue.empty(); // 返回 false和此题一样: addressaddressclass MyQueue: def __init__(self): """ In.原创 2020-09-07 16:56:47 · 100 阅读 · 0 评论 -
leetcode有序数组的平方(977)
给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。输入:[-4,-1,0,3,10]输出:[0,1,9,16,100]addressfrom typing import Listdef sorted_squares(A: List[int]) -> List[int]: # return list(map(lambda x: x*x, sorted(A, key=lambda x: abs(x)))) retu.原创 2020-09-06 21:47:06 · 192 阅读 · 0 评论 -
leetcode反转字符串(344)
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1)的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]addressfrom typing import Listdef reverse_string(s: List[str]) -&.原创 2020-09-06 21:31:08 · 110 阅读 · 0 评论 -
leetcode除数博弈(1025)
爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:选出任一 x,满足 0 < x < N 且 N % x == 0 。用 N - x 替换黑板上的数字 N 。如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 False。假设两个玩家都以最佳状态参与游戏。输入:2输出:true解释:爱丽丝选择 1,鲍勃无法进行操作。addressdef原创 2020-09-05 20:35:29 · 160 阅读 · 0 评论 -
leetcode递增顺序查找树(897)
给你一个树,请你 按中序遍历 重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。address# Definition for a binary tree node.class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def inc.原创 2020-09-05 19:36:02 · 239 阅读 · 0 评论 -
leetcode最近的请求次数(933)
写一个 RecentCounter 类来计算最近的请求。它只有一个方法:ping(int t),其中 t 代表以毫秒为单位的某个时间。返回从 3000 毫秒前到现在的 ping 数。任何处于 [t - 3000, t] 时间范围之内的 ping 都将会被计算在内,包括当前(指 t 时刻)的 ping。保证每次对 ping 的调用都使用比之前更大的 t 值。输入:inputs = [“RecentCounter”,“ping”,“ping”,“ping”,“ping”], inputs = [.原创 2020-09-05 18:43:44 · 203 阅读 · 0 评论 -
leetcode增减字符串匹配(942)
给定只含 “I”(增大)或 “D”(减小)的字符串 S ,令 N = S.length。返回 [0, 1, …, N] 的任意排列 A 使得对于所有 i = 0, …, N-1,都有:如果 S[i] == “I”,那么 A[i] < A[i+1]如果 S[i] == “D”,那么 A[i] > A[i+1]输入:“IDID”输出:[0,4,1,3,2]addressfrom typing import Listdef di_string_match(S: str.原创 2020-09-04 10:23:55 · 177 阅读 · 0 评论 -
leetcode数组拆分(561)
给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1),(a2, b2), …, (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。输入: [1,4,3,2]输出: 4解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4).提示:n 是正整数,范围在 [1, 10000].数组中的元素范围在 [-10000, 10000].addressfrom typing import List.原创 2020-09-04 09:44:22 · 233 阅读 · 0 评论 -
leetcode判定字符是否唯一
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。输入: s = “leetcode”输出: falseaddressdef is_unique(astr: str) -> bool: # 1. 利用集合去重 # return len(astr) == len(set(astr)) # 2. 遍历一遍字符串,如果重复则返回False buckets = [0] * 26 for char in astr: buck.原创 2020-09-04 09:32:37 · 160 阅读 · 0 评论 -
leetcode商品折扣后的最终价格(1475)
给你一个数组 prices ,其中 prices[i] 是商店里第 i 件商品的价格。商店里正在进行促销活动,如果你要买第 i 件商品,那么你可以得到与 prices[j]相等的折扣,其中 j 是满足 j > i 且 prices[j] <= prices[i] 的 最小下标 ,如果没有满足条件的 j ,你将没有任何折扣。请你返回一个数组,数组中第 i 个元素是折扣后你购买商品 i 最终需要支付的价格。输入:prices = [8,4,6,2,3]输出:[4,2,4,2,3].原创 2020-09-03 20:24:20 · 541 阅读 · 0 评论 -
leetcode生成每种字符都是奇数个的字符串(1374)
给你一个整数 n,请你返回一个含 n 个字符的字符串,其中每种字符在该字符串中都恰好出现 奇数次 。返回的字符串必须只含小写英文字母。如果存在多个满足题目要求的字符串,则返回其中任意一个即可。输入:n = 4输出:“pppz”解释:“pppz” 是一个满足题目要求的字符串,因为 ‘p’ 出现 3 次,且 ‘z’ 出现 1 次。当然,还有很多其他字符串也满足题目要求,比如:“ohhh” 和 “love”。addressdef generate_the_string(n: int).原创 2020-09-03 20:06:10 · 154 阅读 · 0 评论 -
leetcode二进制中1的个数
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。addressdef hamming_weight(self, n: int) -> int: """ 此题与lee.原创 2020-09-03 19:54:48 · 121 阅读 · 0 评论