供暖器
力扣 475. 供暖器题目说明冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。
在加热器的加热半径范围内的每个房屋都可以获得供暖。
现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。
说明:所有供暖器都遵循你的半径标准,加热的半径也一样。
提示:
1 <= houses.length, heaters.length <= 3 * 10^4
1 <= houses[i], heaters[i] <= 10^9
示例示例 1:
123输入: houses = [1,2,3], heaters = [2]输出: 1解释: 仅在位置2上有一个供暖器。如果我们将加热半径设为1,那么所有房屋就都能得到供暖。
示例 2:
123输入: houses = [1,2,3,4], heaters = [1,4]输出: 1解释: 在位置1, 4上有两个供暖器。我们需要将加热半径设为1,这样所有房屋就都能得到供暖。
示例 3:
12输入:houses = [1,5], heat ...
找到小镇的法官
力扣 997. 找到小镇的法官题目说明在一个小镇里,按从 1 到 n 为 n 个人进行编号。传言称,这些人中有一个是小镇上的秘密法官。
如果小镇的法官真的存在,那么:
小镇的法官不相信任何人。每个人(除了小镇法官外)都信任小镇的法官。只有一个人同时满足条件 1 和条件 2 。给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示编号为 a 的人信任编号为 b 的人。
如果小镇存在秘密法官并且可以确定他的身份,请返回该法官的编号。否则,返回 -1。
提示:
1 <= numBottles <= 100
2 <= numExchange <= 100
示例示例 1:
12输入:n = 2, trust = [[1,2]]输出:2
示例 2:
12输入:n = 3, trust = [[1,3],[2,3]]输出:3
示例 3:
12输入:n = 3, trust = [[1,3],[2,3],[3,1]]输出:-1
示例 4:
12输入:n = 3, trust = [[1,2],[2,3]]输出:-1
示例 5:
12输入 ...
甲板上的战舰
力扣 419. 甲板上的战舰题目说明给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 ‘X’ 或者是一个空位 ‘.’ ,返回在甲板 board 上放置的 战舰 的数量。
战舰 只能水平或者垂直放置在 board 上。换句话说,战舰只能按 1 x k(1 行,k 列)或 k x 1(k 行,1 列)的形状建造,其中 k 可以是任意大小。两艘战舰之间至少有一个水平或垂直的空位分隔 (即没有相邻的战舰)。
提示:
m == board.length
n == board[i].length
1 <= m, n <= 200
board[i][j] 是 '.' 或 'X'
示例示例 1:
12输入:board = [["X",".",".","X"],[".",".",".","X"],[".",".",&q ...
换酒问题
力扣 1518. 换酒问题题目说明小区便利店正在促销,用 numExchange 个空酒瓶可以兑换一瓶新酒。你购入了 numBottles 瓶酒。
如果喝掉了酒瓶中的酒,那么酒瓶就会变成空的。
请你计算 最多 能喝到多少瓶酒。
提示:
1 <= numBottles <= 100
2 <= numExchange <= 100
示例示例 1:
1234输入:numBottles = 9, numExchange = 3输出:13解释:你可以用 3 个空酒瓶兑换 1 瓶酒。所以最多能喝到 9 + 3 + 1 = 13 瓶酒。
示例 2:
1234输入:numBottles = 15, numExchange = 4输出:19解释:你可以用 4 个空酒瓶兑换 1 瓶酒。所以最多能喝到 15 + 3 + 1 = 19 瓶酒。
示例 3:
12输入:numBottles = 5, numExchange = 5输出:6
示例 4:
12输入:numBottles = 2, numExchange = 3输出:2
笔者理解此题是一道数学算法问题,在力扣 ...
后端仔如何优雅的写前端(一)
引入 无论是在生产或者学习中,我们后端开发人员(以下简称为后端仔),总是离不开和前端打交道,甚至在某些迫不得已的时候,我们也需要挺身而出靠自己的能力编写前端。此篇文章仅根据笔者自己的理解加一些的实际编写经验,适合对前端想要了解或者是来要做项目抱佛脚的后端仔。
我相信很多小伙伴其实和笔者一样,都是接触后端语言,类似于c++、java等入门的,各大高校的课程通常没有直接教学并实战前端的,所以在这里我先从前端的介绍开始逐步给大家展示如何上手前端。在本篇中主要是对前端的情况以及发展历史做一些介绍,不感兴趣的读者可以直接转看下一篇,但还是建议读者粗略的看一眼,只需注意加粗的部分即可,这关系到我们后面上手时所用的技术或语言。
前端的介绍介绍 前端(英语:front-end)和后端(英语:back-end)是描述进程开始和结束的通用词汇。前端作用于采集输入信息,后端进行处理。计算机程序的界面样式,视觉呈现属于前端。在软体架构和程序设计领域,前端是软体系统中直接和用户交互的部分,而后端控制着软件的输出。说白了在通常的项目和工程中,直接展示给用户,可以直接与用户进行交互的部分, ...
二叉树的最近公共祖先
力扣 236. 二叉树的最近公共祖先题目说明给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
提示:
树中节点数目在范围 [2, 10^5] 内。
-10^9 <= Node.val <= 10^9
所有 Node.val 互不相同 。
p != q
p 和 q 均存在于给定的二叉树中。
示例示例 1:
123输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。
示例 2:
123输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4输出:5解释:节点 5 和节点 4 的最近公共祖先是节点 5 。因为根据定义最近公共祖先节点可以为节点本身。
示例 3:
12输入:root = [1,2], p = 1 ...
寻找重复数
力扣 287. 寻找重复数题目说明给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。
假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。
你设计的解决方案必须不修改数组 nums 且只用常量级 O(1) 的额外空间。
提示:
1 <= n <= 10^5
nums.length == n + 1
1 <= nums[i] <= n
nums 中 只有一个整数 出现 两次或多次 ,其余整数均只出现 一次
示例示例 1:
12输入:nums = [1,3,4,2,2]输出:2
示例 2:
12输入:nums = [3,1,3,4,2]输出:3
示例 3:
12输入:nums = [1,1]输出:1
示例 4:
12输入:nums = [1,1,2]输出:1
笔者理解此题是一道数组算法问题,在力扣题库中被定义为中等题。
解法当笔者阅读完此题后,发现题目要求的是至少出现一个,所以就不能使用位运算了,这里可以将这个数组看成循环数组,然后使用快慢指针求解,让我们来看 ...
最长和谐子序列
力扣 594. 最长和谐子序列题目说明和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。
现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。
数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。
提示:
1 <= nums.length <= 2 * 10^4
-10^9 <= nums[i] <= 10^9
示例示例 1:
123输入:nums = [1,3,2,2,5,2,3,7]输出:5解释:最长的和谐子序列是 [3,2,2,2,3]
示例 2:
12输入:nums = [1,2,3,4]输出:2
示例 3:
12输入:nums = [1,1,1,1]输出:0
笔者理解此题是一道数组算法问题,在力扣题库中被定义为简单题。
解法当笔者阅读完此题后,发现因为本题不要求是子数组,所以可以直接对元素进行统计,让我们来看看具体如何实现的吧。
实现1234567891011121314151617181920212223242526272829 ...
单词拆分
力扣 139. 单词拆分题目说明给你一个字符串 s 和一个字符串列表 wordDict 作为字典,判定 s 是否可以由空格拆分为一个或多个在字典中出现的单词。
说明:拆分时可以重复使用字典中的单词。
提示:
1 <= s.length <= 300
1 <= wordDict.length <= 1000
1 <= wordDict[i].length <= 20
s 和 wordDict[i] 仅有小写英文字母组成
wordDict 中的所有字符串 互不相同
示例示例 1:
123输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。
示例 2:
1234输入: s = "applepenapple", wordDict = ["apple", "pe ...
最长连续序列
力扣 128. 最长连续序列题目说明给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
提示:
0 <= nums.length <= 10^5
-10^9 <= nums[i] <= 10^9
示例示例 1:
123输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
示例 2:
12输入:nums = [0,3,7,2,5,8,4,6,0,1]输出:9
笔者理解此题是一道数组算法问题,在力扣题库中被定义为中等题。
解法当笔者阅读完此题后,使用了HashSet来存储数组中数,利用他的contains方法来判断当前元素是否有后继,让我们来看看具体如何实现的吧。
实现1234567891011121314151617181920212223242526272829303132class Solution { /** * HashSet ...








