- 博客(149)
- 收藏
- 关注
原创 剑指offer_106 二分图
题目:存在一个 无向图 ,图中有 n 个节点。其中每个节点都有一个介于 0 到 n - 1 之间的唯一编号。给定一个二维数组 graph,表示图,其中 graph[u] 是一个节点数组,由节点 u 的邻接节点组成。形式上,对于graph[u] 中的每个 v ,都存在一条位于节点 u 和节点 v 之间的无向边。该无向图同时具有以下属性:不存在自环(graph[u] 不包含 u)。不存在平行边(graph[u] 不包含重复值)。如果 v 在 graph[u] 内,那么 u 也应该在 gr...
2022-03-05 08:56:55 301
转载 剑指offer_105 岛屿的最大面积
题目:给定一个由0 和 1 组成的非空二维数组grid,用来表示海洋岛屿地图。一个岛屿是由一些相邻的1(代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。示例 1:输入: grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1...
2022-03-05 08:56:46 287
原创 剑指offer_104 排列的数目
题目:给定一个由 不同正整数组成的数组 nums ,和一个目标整数 target 。请从 nums 中找出并返回总和为 target 的元素组合的个数。数组中的数字可以在一次排列中出现任意次,但是顺序不同的序列被视作不同的组合。题目数据保证答案符合 32 位整数范围。示例 1:输入:nums = [1,2,3], target = 4输出:7解释:所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2).
2022-03-05 08:56:37 280
原创 剑指offer_103 最少的硬币数目
题目:给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1示例 3:输入:coins = [1], amount = 0.
2022-03-04 13:13:01 220
原创 剑指offer_102 加减的目标值
题目:给定一个正整数数组 nums 和一个整数 target 。向数组中的每个整数前添加'+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法.
2022-03-04 11:27:51 388
原创 剑指offer_101 分割等和子集
题目:给定一个非空的正整数数组 nums ,请判断能否将这些数字分成元素和相等的两部分。示例 1:输入:nums = [1,5,11,5]输出:true解释:nums 可以分割成 [1, 5, 5] 和 [11] 。示例 2:输入:nums = [1,2,3,5]输出:false解释:nums 不可以分为和相等的两部分提示:1 <= nums.length <= 2001 <= nums[i] <= 100代码:clas
2022-03-04 10:55:38 505
原创 剑指offer_100 三角形中最小路径和
题目:给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。示例 1:输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]输出:11解释:如下面简图所示: 2 3 46 5 74 1 8 3...
2022-03-04 10:35:56 90
原创 剑指offer_099 最小路径和
题目:给定一个包含非负整数的 mxn网格grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:一个机器人每次只能向下或者向右移动一步。示例 1:输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。示例 2:输入:grid = [[1,2,3],[4,5,6]]输出:12提示:m == grid.lengthn == grid[i].length...
2022-03-04 10:33:31 286
原创 剑指offer_098 路径的数目
题目:一个机器人位于一个 m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下2. 向下 -> 向下 -&g.
2022-03-04 09:56:32 81
原创 剑指offer_096 字符串交织
题目:给定三个字符串 s1、s2、s3,请判断 s3 能不能由 s1 和 s2 交织(交错) 组成。两个字符串 s 和 t 交织 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:s = s1 + s2 + ... + snt = t1 + t2 + ... + tm|n - m| <= 1交织 是 s1 + t1 + s2 + t2 + s3 + t3 + ... 或者 t1 + s1 + t2 + s2 + t3 + s3 + ...提示:a + b 意味着字
2022-03-04 09:31:19 206
原创 剑指offer_095 最长公共子序列
题目:给定两个字符串text1 和text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 1:输入:text1 = "abcde", t...
2022-03-04 09:13:04 6626
原创 剑指offer_093 最长斐波那契数列
题目:如果序列X_1, X_2, ..., X_n满足下列条件,就说它是斐波那契式的:n >= 3对于所有i + 2 <= n,都有X_i + X_{i+1} = X_{i+2}给定一个严格递增的正整数数组形成序列 arr,找到 arr 中最长的斐波那契式的子序列的长度。如果一个不存在,返回0 。(回想一下,子序列是从原序列arr 中派生出来的,它从 arr 中删掉任意数量的元素(也可以不删),而不改变其余元素的顺序。例如,[3, 5, 8]是[3,...
2022-03-04 09:10:30 156
原创 剑指offer_092 翻转字符
题目:如果一个由'0' 和 '1'组成的字符串,是以一些 '0'(可能没有 '0')后面跟着一些 '1'(也可能没有 '1')的形式组成的,那么该字符串是单调递增的。我们给出一个由字符 '0' 和 '1'组成的字符串 s,我们可以将任何'0' 翻转为'1'或者将'1'翻转为'0'。返回使 s单调递增的最小翻转次数。示例 1:输入:s = "00110"输出:1解释:我们翻转最后一位得到 00111.示例 2:输入:s = "010110"...
2022-03-04 09:07:19 117
原创 剑指offer_91 粉刷房子
题目:假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的正整数矩阵 costs 来表示的。例如,costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2] 表示第 1 号房子粉刷成绿色的花费,以此类推。请计算出粉刷完所有房子最少的花费成本
2022-03-03 12:50:35 113
原创 剑指offer_090 环形房屋偷盗
题目:一个专业的小偷,计划偷窃一个环形街道上沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组 nums ,请计算 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。示例 1:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃
2022-03-03 11:20:01 89
原创 剑指offer_089 房屋偷盗
题目:一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响小偷偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组 nums ,请计算 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:nums = [1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 ...
2022-03-03 10:59:24 108
原创 剑指offer_088 爬楼梯的最少成本
题目:数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值cost[i](下标从 0 开始)。每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。请找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。示例 1:输入:cost = [10, 15, 20]输出:15解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。示例 2:输入.
2022-03-03 10:19:47 5794
原创 剑指offer_087 复原IP
题目:给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能从s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。示例 1:输入:.
2022-03-03 09:25:58 220
原创 剑指offer_086 分割回文字符串
题目:给定一个字符串 s ,请将 s 分割成一些子串,使每个子串都是 回文串 ,返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。示例 1:输入:s = "google"输出:[["g","o","o","g","l","e"],["g","oo","g","l","e"],["goog","l","e"]]示例 2:输入:s = "aab"输出:[["a","a","b"],["aa","b"]]示例 3:输入:s = "a"输出:[
2022-03-03 09:25:51 172
原创 剑指offer_085 生成匹配的括号
题目:正整数 n 代表生成括号的对数,请设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8代码:class Solution { List<String> res = new ArrayList<>().
2022-03-03 09:22:55 182
原创 剑指offer_084 含有重复元素集合的全排列
题目:给定一个可包含重复数字的整数集合nums ,按任意顺序 返回它所有不重复的全排列。示例 1:输入:nums = [1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]示例 2:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]提示:1 <= nums.length <= 8-10 <= nums[i] <= 10...
2022-03-03 09:22:48 147
原创 剑指offer_083 没有重复元素集合的全排列
题目:给定一个不含重复数字的整数数组 nums ,返回其 所有可能的全排列 。可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]提示:1 <= nums.length <= 6-10 &l
2022-03-03 09:22:30 93
原创 剑指offer_082 含有重复元素集合的组合
题目:给定一个可能有重复数字的整数数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每个组合中只能使用一次,解集不能包含重复的组合。示例1:输入: candidates =[10,1,2,7,6,1,5], target =8,输出:[[1,1,6],[1,2,5],[1,7],[2,6]]示例2:输入: candidates =[2...
2022-03-03 09:22:21 74
原创 剑指offer_81 允许重复选择元素的组合
题目:给定一个无重复元素的正整数数组candidates和一个正整数target,找出candidates中所有可以使数字和为目标数target的唯一组合。candidates中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是不同的。对于给定的输入,保证和为target 的唯一组合数少于 150 个。示例1:输入: candidates = [2,3,6,7], target = 7输出: [[7],[2,2,3]]示例2:...
2022-03-02 14:23:44 75
原创 剑指offer_080 含有k个元素的集合
题目:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。示例 1:输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]示例 2:输入:n = 1, k = 1输出: [[1]]提示:1 <= n <= 201 <= k <= n代码:class Solution { List<L...
2022-03-02 13:58:04 71
原创 剑指offer_79 所有子集
题目:给定一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]提示:1 <= nums.length <= 10-10 <= nums[i] <= 10
2022-03-02 13:02:37 133
原创 剑指offer_077 链表排序
题目:给定链表的头结点head,请将其按 升序 排列并返回 排序后的链表 。示例 1:输入:head = [4,2,1,3]输出:[1,2,3,4]示例 2:输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]示例 3:输入:head = []输出:[]提示:链表中节点的数目在范围[0, 5 * 104]内-105<= Node.val <= 105代码:class Solution { ...
2022-03-02 11:28:27 294
原创 剑指offer_076 数组中的第k大的数字
题目:给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4提示:1 <= k <= nums.length <= 104-104<= nums[i] <= 104代码一:.
2022-03-02 11:00:41 405
原创 剑指offer_075 数组相对排序
题目:给定两个数组,arr1 和 arr2,arr2中的元素各不相同arr2 中的每个元素都出现在arr1中对 arr1中的元素进行排序,使 arr1 中项的相对顺序和arr2中的相对顺序相同。未在arr2中出现过的元素需要按照升序放在arr1的末尾。示例:输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]输出:[2,2,2,1,4,3,3,9,6,7,19]提示:1 <= arr...
2022-03-02 09:55:42 214
原创 剑指offer_074 合并区间
题目:以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例2:输入:intervals =.
2022-03-02 09:23:29 79
原创 剑指offer_073 狒狒吃香蕉
题目:狒狒喜欢吃香蕉。这里有N堆香蕉,第 i 堆中有piles[i]根香蕉。警卫已经离开了,将在H小时后回来。狒狒可以决定她吃香蕉的速度K(单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉,下一个小时才会开始吃另一堆的香蕉。狒狒喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。示例 1:输入: p...
2022-03-02 08:45:40 134
原创 剑指offer_072 求平方根
题目:给定一个非负整数 x ,计算并返回 x 的平方根,即实现int sqrt(int x)函数。正数的平方根有两个,只输出其中的正数平方根。如果平方根不是整数,输出只保留整数的部分,小数部分将被舍去。示例 1:输入: x = 4输出: 2示例 2:输入: x = 8输出: 2解释: 8 的平方根是 2.82842...,由于小数部分将被舍去,所以返回 2提示:0 <= x <= 231- 1代码:class Soluti...
2022-03-02 08:45:32 92
原创 剑指offer_071 按权重生成随机数
题目:给定一个正整数数组w ,其中w[i]代表下标 i的权重(下标从 0 开始),请写一个函数pickIndex,它可以随机地获取下标 i,选取下标 i的概率与w[i]成正比。例如,对于 w = [1, 3],挑选下标 0 的概率为 1 / (1 + 3)= 0.25 (即,25%),而选取下标 1 的概率为 3 / (1 + 3)= 0.75(即,75%)。也就是说,选取下标 i 的概率为 w[i] / sum(w) 。示例 1:输入:inputs = [...
2022-03-02 08:45:16 124
原创 剑指offer_070 排序数组中只出现一次的数字
题目:给定一个只包含整数的有序数组 nums,每个元素都会出现两次,唯有一个数只会出现一次,请找出这个唯一的数字。示例 1:输入: nums = [1,1,2,3,3,4,4,8,8]输出: 2示例 2:输入: nums = [3,3,7,7,10,11,11]输出: 10提示:1 <= nums.length <= 1050 <= nums[i]<= 105代码:class Solution { public...
2022-03-01 13:35:43 335
原创 剑指offer_069
题目:符合下列属性的数组 arr 称为 山峰数组(山脉数组) :arr.length >= 3存在 i(0 < i< arr.length - 1)使得:arr[0] < arr[1] < ... arr[i-1] < arr[i]arr[i] > arr[i+1] > ... > arr[arr.length - 1]给定由整数组成的山峰数组 arr ,返回任何满足 arr[0] < arr[1] < ... arr[i.
2022-03-01 13:19:12 6234
原创 剑指offer_068 查找插入位置
题目:给定一个排序的整数数组 nums和一个整数目标值 target ,请在数组中找到target,并返回其下标。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。示例 1:输入: nums = [1,3,5,6], target = 5输出: 2示例 2:输入: nums = [1,3,5,6], target = 2输出: 1示例 3:输入: nums = [1,3,5,6], target ...
2022-03-01 13:10:17 112
原创 剑指offer_067 最大的异或
题目:给定一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n 。示例 1:输入:nums = [3,10,5,25,2,8]输出:28解释:最大运算结果是 5 XOR 25 = 28.示例 2:输入:nums = [0]输出:0示例 3:输入:nums = [2,4]输出:6示例 4:输入:nums = [8,10,2]输出:10示例 5:输入:nums =
2022-03-01 13:01:12 142
原创 剑指offer_066 单词之和
题目:实现一个 MapSum 类,支持两个方法,insert和sum:MapSum() 初始化 MapSum 对象void insert(String key, int val) 插入 key-val 键值对,字符串表示键 key ,整数表示值 val 。如果键 key 已经存在,那么原来的键值对将被替代成新的键值对。int sum(string prefix) 返回所有以该前缀 prefix 开头的键 key 的值的总和。示例:输入:inputs = ["MapSum", ..
2022-03-01 11:22:24 67
原创 剑指offer_065 最短的单词编码
题目:单词数组words 的 有效编码 由任意助记字符串 s 和下标数组 indices 组成,且满足:words.length == indices.length助记字符串 s 以 '#' 字符结尾对于每个下标 indices[i] ,s 的一个从 indices[i] 开始、到下一个 '#' 字符结束(但不包括 '#')的 子字符串 恰好与 words[i] 相等给定一个单词数组words ,返回成功对 words 进行编码的最小助记字符串 s 的长度 。示例 1:输入:..
2022-03-01 10:56:08 128
原创 剑指offer_064 神奇的字典
题目:设计一个使用单词列表进行初始化的数据结构,单词列表中的单词 互不相同 。 如果给出一个单词,请判定能否只将这个单词中一个字母换成另一个字母,使得所形成的新单词存在于已构建的神奇字典中。实现 MagicDictionary 类:MagicDictionary() 初始化对象void buildDict(String[]dictionary) 使用字符串数组dictionary 设定该数据结构,dictionary 中的字符串互不相同bool search(String search..
2022-03-01 10:32:21 118
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人