自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 收藏
  • 关注

原创 [python]:单词矩阵

给定一份单词的清单,设计一个算法,创建由字母组成的面积最大的矩形,其中每一行组成一个单词(自左向右),每一列也组成一个单词(自上而下)。不要求这些单词在清单里连续出现,但要求所有行等长,所有列等高。如果有多个面积最大的矩形,输出任意一个均可。一个单词可以重复使用。示例 1:输入: ["this", "real", "hard", "trh", "hea", "iar", "sld"]输出:[ "this", "real", "hard"]示例 2:输入: ["aa"

2020-12-11 14:10:28 470

原创 [python]:最大子矩阵

给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。注意:本题相对书上原题稍作改动示例:输入:[ [-1,0], [0,-1]]输出:[0,1,0,1]解释:输入中标粗的元素即为输出所表示的矩阵 说明:1 <= matrix.leng

2020-12-10 23:12:32 3717

原创 【python】:最大黑方阵

给定一个方阵,其中每个单元(像素)非黑即白。设计一个算法,找出 4 条边皆为黑色像素的最大子方阵。返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和列号,size 是子方阵的边长。若有多个满足条件的子方阵,返回 r 最小的,若 r 相同,返回 c 最小的子方阵。若无满足条件的子方阵,返回空数组。示例 1:输入:[ [1,0,1], [0,0,1], [0,0,1]]输出: [1,0,2]解释: 输入中 0 代表黑色,1 代表白色,标粗

2020-12-09 13:08:50 358

原创 [python]:单词转换

给定字典中的两个词,长度相等。写一个方法,把一个词转换成另一个词, 但是一次只能改变一个字符。每一步得到的新词都必须能在字典中找到。编写一个程序,返回一个可能的转换序列。如有多个可能的转换序列,你可以返回任何一个。示例 1:输入:beginWord = "hit",endWord = "cog",wordList = ["hot","dot","dog","lot","log","cog"]输出:["hit","hot","dot","lot","log","cog"]示例 2:

2020-12-08 19:31:22 903

原创 【python】:直方图的水量

给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6一、双指针class Solution: def trap(self, height: List[int]) -> int: if len(height) < 3: return 0 left = 0 right = len(h

2020-12-05 20:01:23 218

原创 [python]:消失的两个数字

给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?以任意顺序返回这两个数字均可。示例 1:输入: [1]输出: [2,3]示例 2:输入: [2,3]输出: [1,4]提示:nums.length <= 30000一、数学方法以两数之和的平均值为界,一个在limit左边,一个在limit右边。class Solution: def missingTwo(self, nums: List

2020-12-04 23:17:31 199

原创 [python]:多次搜索

给定一个较长字符串big和一个包含较短字符串的数组smalls,设计一个方法,根据smalls中的每一个较短字符串,对big进行搜索。输出smalls中的字符串在big里出现的所有位置positions,其中positions[i]为smalls[i]出现的所有位置。示例:输入:big = "mississippi"smalls = ["is","ppi","hi","sis","i","ssippi"]输出: [[1,4],[8],[],[3],[1,4,7,10],[5]]提示:0

2020-12-03 13:35:36 644

原创 [python]:按摩师

一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。示例 1:输入: [1,2,3,1]输出: 4解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。示例 2:输入: [2,7,9,3,1]输出: 12解释: 选择 1 号预约、 3 号预约和 5 号预约,总时长 = 2 + 9 + 1 = 12。示例 3:输入

2020-12-01 13:44:30 177

原创 [python]:最长单词

给定一组单词words,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他单词组合而成。若有多个长度相同的结果,返回其中字典序最小的一项,若没有符合要求的单词则返回空字符串。示例:输入: ["cat","banana","dog","nana","walk","walker","dogwalker"]输出: "dogwalker"解释: "dogwalker"可由"dog"和"walker"组成。提示:0 <= len(words) <= 2001 <= le

2020-11-30 19:47:07 5908

原创 【python】:恢复空格

成了小写。像句子"I reset the computer. It still didn’t boot!"已经变成了"iresetthecomputeritstilldidntboot"。在处理标点符号和大小写之前,你得先把它断成词语。当然了,你有一本厚厚的词典dictionary,不过,有些词没在词典里。假设文章用sentence表示,设计一个算法,把文章断开,要求未识别的字符最少,返回未识别的字符数。注意:本题相对原题稍作改动,只需返回未识别的字符数 示例:输入:dictionary

2020-11-30 19:43:33 182

原创 [python]:单词距离

有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?示例:输入:words = ["I","am","a","student","from","a","university","in","a","city"], word1 = "a", word2 = "student"输出:1提示:words.length <= 100000一、双指针在一个for循环里遍历w

2020-11-28 13:17:29 437

原创 [python]: 第 k 个数

有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。示例 1:输入: k = 5输出: 9一、三指针一个数总是由前面的某一个丑数 x3 / x5 / x7 得到:class Solution: def getKthMagicNumber(self, k: int) -> int: NumList = [0 for _ in rang

2020-11-27 22:38:57 484

原创 [python]:马戏团人塔

有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上。出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一点。已知马戏团每个人的身高和体重,请编写代码计算叠罗汉最多能叠几个人。示例:输入:height = [65,70,56,75,60,68] weight = [100,150,90,190,95,110]输出:6解释:从上往下数,叠罗汉最多能叠 6 层:(56,90), (60,95), (65,100), (68,110), (70,150), (75,190)提示:h

2020-11-27 14:33:45 449

原创 【python】: 婴儿名字

年,政府都会公布一万个最常见的婴儿名字和它们出现的频率,也就是同名婴儿的数量。有些名字有多种拼法,例如,John 和 Jon 本质上是相同的名字,但被当成了两个名字公布出来。给定两个列表,一个是名字及对应的频率,另一个是本质相同的名字对。设计一个算法打印出每个真实名字的实际频率。注意,如果 John 和 Jon 是相同的,并且 Jon 和 Johnny 相同,则 John 与 Johnny 也相同,即它们有传递和对称性。在结果列表中,选择字典序最小的名字作为真实名字。示例:输入:names =

2020-11-26 14:38:19 140

原创 [python]:2出现的次数

编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数。示例:输入: 25输出: 9解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 应该算作两次)提示:n <= 10^9一、dp方法第i位是1:dp[3] = 当第3位是0,1-2位取00-99时2的次数 + 当第3位是1, 1-2位取00~78时2的次数dp[3] = numberOf2sInRange(99) + dp[2]numberOf2sInRange(178)

2020-11-25 19:11:40 2960

原创 [python]:字母与数字

给定一个放有字符和数字的数组,找到最长的子数组,且包含的字符和数字的个数相同。返回该子数组,若存在多个最长子数组,返回左端点最小的。若不存在这样的数组,返回一个空数组。示例 1:输入: ["A","1","B","C","D","2","3","4","E","5","F","G","6","7","H","I","J","K","L","M"]输出: ["A","1","B","C","D","2","3","4","E","5","F","G","6","7"]示例 2:输入: [

2020-11-25 11:21:42 761

原创 【python】:不用加号的加法

设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。示例:输入: a = 1, b = 1输出: 2 提示:a, b 均可能是负数或 0结果不会溢出 32 位整数一、位运算在不考虑进位的情况下,加法可以用异或来表示;当1+1时会产生进位,可用&来判断;将仅为相左移一位再进行异或来相加。class Solution: def add(self, a: int, b: int) -> int: a &= 0xFFFFFFF

2020-11-24 12:00:24 799

原创 [python]:T9键盘

在老式手机上,用户通过数字键盘输入,手机将提供与这些数字相匹配的单词列表。每个数字映射到0至4个字母。给定一个数字序列,实现一个算法来返回匹配单词的列表。你会得到一张含有有效单词的列表。映射如下图所示:示例 1:输入: num = "8733", words = ["tree", "used"]输出: ["tree", "used"]示例 2:输入: num = "2", words = ["a", "b", "c", "d"]输出: ["a", "b", "c"]提示:num.

2020-11-23 20:32:59 333

原创 [python]:水域大小

你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度。若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。池塘的大小是指相连接的水域的个数。编写一个方法来计算矩阵中所有池塘的大小,返回值需要从小到大排序。示例:输入:[ [0,2,1,0], [0,1,0,1], [1,1,0,1], [0,1,0,1]]输出: [1,2,4]提示:0 < len(land) <= 10000 < len(land[i]) <=

2020-11-23 19:17:52 356

原创 [python]:消失的数字

数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?注意:本题相对书上原题稍作改动示例 1:输入:[3,0,1]输出:2 示例 2:输入:[9,6,4,2,3,5,7,0,1]输出:8一、排序后对比class Solution: def missingNumber(self, nums: List[int]) -> int: if not nums: retur

2020-11-23 12:22:11 346

原创 【python】:模式匹配

你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a","go"是"b"),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b"不能同时表示相同的字符串。编写一个方法判断value字符串是否匹配pattern字符串。示例 1:输入: pattern = "abba", value = "dogcatcatdog"输出: tru

2020-11-23 12:01:44 322

原创 【python】: 部分排序

给定一个整数数组,编写一个函数,找出索引m和n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。注意:n-m尽量最小,也就是说,找出符合条件的最短序列。函数返回值为[m,n],若不存在这样的m和n(例如整个数组是有序的),请返回[-1,-1]。示例:输入: [1,2,4,7,10,11,7,12,6,7,16,18,19]输出: [3,9]一、双指针用一组数保存排好序的数组;从两端向中间遍历找出不同的部分的起止索引;对比两个数组中间部分排序后是否一致。class Solution

2020-11-19 13:59:42 1020

原创 【python】:数字流的秩

假设你正在读取一串整数。每隔一段时间,你希望能找出数字 x 的秩(小于或等于 x 的值的个数)。请实现数据结构和算法来支持这些操作,也就是说:实现 track(int x) 方法,每读入一个数字都会调用该方法;实现 getRankOfNumber(int x) 方法,返回小于或等于 x 的值的个数。注意:本题相对原题稍作改动示例:输入:["StreamRank", "getRankOfNumber", "track", "getRankOfNumber"][[], [1], [0],

2020-10-30 11:41:46 191

原创 [python]: 排序矩阵查找

给定M×N矩阵,每一行、每一列都按升序排列,请编写代码找出某元素。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定 target = 20,返回 false。一、常规法class Solution:

2020-10-29 12:21:39 366

原创 【python】:搜索旋转数组

搜索旋转数组。给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次了,次数不详。请编写代码找出数组中的某个元素,假设数组元素原先是按升序排列的。若有多个相同元素,返回索引值最小的一个。示例1: 输入: arr = [15, 16, 19, 20, 25, 1, 3, 4, 5, 7, 10, 14], target = 5 输出: 8(元素5在该数组中的索引)示例2: 输入:arr = [15, 16, 19, 20, 25, 1, 3, 4, 5, 7, 10, 14], tar

2020-10-20 18:02:13 491 1

原创 [python]: 变位词组

编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。注意:本题相对原题稍作修改示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]说明:所有输入均为小写字母。不考虑答案输出的顺序。一、位表示(不考虑有重复字母)每个字符串用一个26位的二进制数来表示用了哪些字母。class

2020-10-16 19:44:52 214

原创 【python】:布尔运算

给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成。实现一个函数,算出有几种可使该表达式得出 result 值的括号方法。示例 1:输入: s = "1^0|0|1", result = 0输出: 2解释: 两种可能的括号方法是1^(0|(0|1))1^((0|0)|1)示例 2:输入: s = "0&0&0&1^1|0", result

2020-10-16 18:10:24 886 1

原创 【⭐️】python:八皇后

设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。注意:本题相对原题做了扩展示例: 输入:4 输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]] 解释: 4 皇后问题存在如下两个不同的解法。[ [".Q..", // 解法 1 "...Q", "Q...", "..Q."

2020-09-29 13:19:08 151

原创 【⭐️】【python】:硬币

硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)示例1: 输入: n = 5 输出:2 解释: 有两种方式可以凑成总金额:5=55=1+1+1+1+1示例2: 输入: n = 10 输出:4 解释: 有四种方式可以凑成总金额:10=1010=5+510=5+1+1+1+1+110=1+1+1+1+1+1+1+1+1+1一、动态规划用 f(i, v)来表示前 ii 种面值的

2020-09-11 11:57:10 282

原创 【python】:括号

括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。说明:解集不能包含重复的子集。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]一、递归将下一对“()”插入f(n-1)的所有括号内;用set去重。class Solution: def generateParenthesis(self, n: int) -> List[str]:

2020-09-08 23:35:48 144

原创 【python】:有重复字符串的排列组合

有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。示例1: 输入:S = "qqe" 输出:["eqq","qeq","qqe"]示例2: 输入:S = "ab" 输出:["ab", "ba"]递归:从字符串中挑出一个字符,再加入到其他字符的全排列中;去掉重复只需要判断当前字符是否在之前出现过即可。class Solution: def permutation(self, S: str) -> List[str]: n=len(S)

2020-09-08 21:32:03 2218

原创 【python】:递归乘法

递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。示例1: 输入:A = 1, B = 10 输出:10示例2: 输入:A = 3, B = 4 输出:12一、递归加class Solution: def multiply(self, A: int, B: int) -> int: if A > B: return self.multiply(B,A)

2020-09-08 18:02:18 1724

原创 [python]:幂集

幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。说明:解集不能包含重复的子集。示例: 输入: nums = [1,2,3] 输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]一、递归e.g.{1,2}的子集每个加上3即{1,2,3}的子集class Solution: def subsets(self, nums: List[int]) -> List[List[int

2020-09-07 12:55:42 2617 1

原创 python:迷路的机器人

设想有个机器人坐在一个网格的左上角,网格 r 行 c 列。机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍物)。设计一种算法,寻找机器人从左上角移动到右下角的路径。网格中的障碍物和空位置分别用 1 和 0 来表示。返回一条可行的路径,路径由经过的网格的行号和列号组成。左上角为 0 行 0 列。如果没有可行的路径,返回空数组。示例 1:输入:[ [0,0,0], [0,1,0], [0,0,0]]输出: [[0,0],[0,1],[0,2],[1,2],[2,2]]解释:

2020-09-04 19:00:52 384

原创 【⭐️】python:绘制直线

绘制直线。有个单色屏幕存储在一个一维数组中,使得32个连续像素可以存放在一个 int 里。屏幕宽度为w,且w可被32整除(即一个 int 不会分布在两行上),屏幕高度可由数组长度及屏幕宽度推算得出。请实现一个函数,绘制从点(x1, y)到点(x2, y)的水平线。给出数组的长度 length,宽度 w(以比特为单位)、直线开始位置 x1(比特为单位)、直线结束位置 x2(比特为单位)、直线所在行数 y。返回绘制过后的数组。示例1: 输入:length = 1, w = 32, x1 = 30, x2

2020-09-03 22:14:25 2469

原创 python: 配对交换

配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。示例1: 输入:num = 2(或者0b10) 输出 1 (或者 0b01)示例2: 输入:num = 3 输出:3提示:num的范围在[0, 2^30 - 1]之间,不会发生整数溢出。num & 0x55555555:保留了奇数位上的数num & 0xaaaaaaaa:保留了奇数位上的数奇数位右移,偶数位左移即可class Solution:

2020-09-03 18:16:53 337

原创 python:整数转换

整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。示例1: 输入:A = 29 (或者0b11101), B = 15(或者0b01111) 输出:2示例2: 输入:A = 1,B = 2 输出:2一、求A、B异或后1的个数;n&(n-1)可以讲n最右边出现的第一个1变为0.class Solution: def convertInteger(self, A: int, B: int) -> int: tmp = (A & 0x

2020-09-03 17:54:42 2178

原创 【python】:下一个数

下一个数。给定一个正整数,找出与其二进制表达式中1的个数相同且大小最接近的那两个数(一个略大,一个略小)。示例1: 输入:num = 2(或者0b10) 输出:[4, 1] 或者([0b100, 0b1])示例2: 输入:num = 1 输出:[2, -1]提示:num的范围在[1, 2147483647]之间;如果找不到前一个或者后一个满足条件的正数,那么输出 -1。思路:比num大的数:从右往左找到第一个01,转化成10,分隔后的右半部分要变成最小的数,即所有的1放在低位,其余位

2020-09-03 12:52:33 354

原创 python【⭐️】:求和路径

给定一棵二叉树,其中每个节点都含有一个整数数值(该值或正或负)。设计一个算法,打印节点数值总和等于某个给定值的所有路径的数量。注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下(只能从父节点指向子节点方向)。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \

2020-09-02 18:18:52 230

原创 python:翻转数位

给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。示例 1:输入: num = 1775(110111011112)输出: 8示例 2:输入: num = 7(01112)输出: 4遍历一次num的位数,记录前一个连续的1的个数和后一个连续1的个数,选加起来最大的。class Solution: def reverseBits(self, num: int) -> int: m = 0

2020-09-02 13:19:08 408 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除