mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-09-05 07:21:40 +08:00
update
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
<p>给你一个下标从 <strong>0</strong> 开始的整数数组 <code>nums</code> 。</p>
|
||||
|
||||
<ul>
|
||||
<li><code>nums</code> 的 <strong>最小</strong> 得分是满足 <code>0 <= i < j < nums.length</code> 的 <code>|nums[i] - nums[j]|</code> 的最小值。</li>
|
||||
<li><code>nums</code>的 <strong>最大 </strong>得分是满足 <code>0 <= i < j < nums.length</code> 的 <code>|nums[i] - nums[j]|</code> 的最大值。</li>
|
||||
<li><code>nums</code> 的分数是 <strong>最大</strong> 得分与 <strong>最小</strong> 得分的和。</li>
|
||||
</ul>
|
||||
|
||||
<p>我们的目标是最小化 <code>nums</code> 的分数。你 <strong>最多</strong> 可以修改 <code>nums</code> 中 <strong>2</strong> 个元素的值。</p>
|
||||
|
||||
<p>请你返回修改 <code>nums</code> 中 <strong>至多两个</strong> 元素的值后,可以得到的 <strong>最小分数</strong> 。</p>
|
||||
|
||||
<p><code>|x|</code> 表示 <code>x</code> 的绝对值。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>nums = [1,4,3]
|
||||
<b>输出:</b>0
|
||||
<b>解释:</b>将 nums[1] 和 nums[2] 的值改为 1 ,nums 变为 [1,1,1] 。<code>|nums[i] - nums[j]|</code> 的值永远为 0 ,所以我们返回 0 + 0 = 0 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>nums = [1,4,7,8,5]
|
||||
<b>输出:</b>3
|
||||
<b>解释:
|
||||
</b>将 nums[0] 和 nums[1] 的值变为 6 ,nums 变为 [6,6,7,8,5] 。
|
||||
最小得分是 i = 0 且 j = 1 时得到的 |<code>nums[i] - nums[j]</code>| = |6 - 6| = 0 。
|
||||
最大得分是 i = 3 且 j = 4 时得到的 |<code>nums[i] - nums[j]</code>| = |8 - 5| = 3 。
|
||||
最大得分与最小得分之和为 3 。这是最优答案。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>3 <= nums.length <= 10<sup>5</sup></code></li>
|
||||
<li><code>1 <= nums[i] <= 10<sup>9</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,49 @@
|
||||
<p>给你两个 <strong>二维</strong> 整数数组 <code>nums1</code> 和 <code>nums2.</code></p>
|
||||
|
||||
<ul>
|
||||
<li><code>nums1[i] = [id<sub>i</sub>, val<sub>i</sub>]</code> 表示编号为 <code>id<sub>i</sub></code> 的数字对应的值等于 <code>val<sub>i</sub></code> 。</li>
|
||||
<li><code>nums2[i] = [id<sub>i</sub>, val<sub>i</sub>]</code> 表示编号为 <code>id<sub>i</sub></code> 的数字对应的值等于 <code>val<sub>i</sub></code> 。</li>
|
||||
</ul>
|
||||
|
||||
<p>每个数组都包含 <strong>互不相同</strong> 的 id ,并按 id 以 <strong>递增</strong> 顺序排列。</p>
|
||||
|
||||
<p>请你将两个数组合并为一个按 id 以递增顺序排列的数组,并符合下述条件:</p>
|
||||
|
||||
<ul>
|
||||
<li>只有在两个数组中至少出现过一次的 id 才能包含在结果数组内。</li>
|
||||
<li>每个 id 在结果数组中 <strong>只能出现一次</strong> ,并且其对应的值等于两个数组中该 id 所对应的值求和。如果某个数组中不存在该 id ,则认为其对应的值等于 <code>0</code> 。</li>
|
||||
</ul>
|
||||
|
||||
<p>返回结果数组。返回的数组需要按 id 以递增顺序排列。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>nums1 = [[1,2],[2,3],[4,5]], nums2 = [[1,4],[3,2],[4,1]]
|
||||
<strong>输出:</strong>[[1,6],[2,3],[3,2],[4,6]]
|
||||
<strong>解释:</strong>结果数组中包含以下元素:
|
||||
- id = 1 ,对应的值等于 2 + 4 = 6 。
|
||||
- id = 2 ,对应的值等于 3 。
|
||||
- id = 3 ,对应的值等于 2 。
|
||||
- id = 4 ,对应的值等于5 + 1 = 6 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>nums1 = [[2,4],[3,6],[5,5]], nums2 = [[1,3],[4,3]]
|
||||
<strong>输出:</strong>[[1,3],[2,4],[3,6],[4,3],[5,5]]
|
||||
<strong>解释:</strong>不存在共同 id ,在结果数组中只需要包含每个 id 和其对应的值。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= nums1.length, nums2.length <= 200</code></li>
|
||||
<li><code>nums1[i].length == nums2[j].length == 2</code></li>
|
||||
<li><code>1 <= id<sub>i</sub>, val<sub>i</sub> <= 1000</code></li>
|
||||
<li>数组中的 id 互不相同</li>
|
||||
<li>数据均按 id 以严格递增顺序排列</li>
|
||||
</ul>
|
@@ -0,0 +1,49 @@
|
||||
<p>给你一个 <code>m x n</code> 的矩阵 <code>grid</code> ,每个元素都为 <strong>非负</strong> 整数,其中 <code>grid[row][col]</code> 表示可以访问格子 <code>(row, col)</code> 的 <strong>最早</strong> 时间。也就是说当你访问格子 <code>(row, col)</code> 时,最少已经经过的时间为 <code>grid[row][col]</code> 。</p>
|
||||
|
||||
<p>你从 <strong>最左上角</strong> 出发,出发时刻为 <code>0</code> ,你必须一直移动到上下左右相邻四个格子中的 <strong>任意</strong> 一个格子(即不能停留在格子上)。每次移动都需要花费 1 单位时间。</p>
|
||||
|
||||
<p>请你返回 <strong>最早</strong> 到达右下角格子的时间,如果你无法到达右下角的格子,请你返回 <code>-1</code> 。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<p><img alt="" src="https://assets.leetcode.com/uploads/2023/02/14/yetgriddrawio-8.png" /></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>grid = [[0,1,3,2],[5,1,2,5],[4,3,8,6]]
|
||||
<b>输出:</b>7
|
||||
<b>解释:</b>一条可行的路径为:
|
||||
- 时刻 t = 0 ,我们在格子 (0,0) 。
|
||||
- 时刻 t = 1 ,我们移动到格子 (0,1) ,可以移动的原因是 grid[0][1] <= 1 。
|
||||
- 时刻 t = 2 ,我们移动到格子 (1,1) ,可以移动的原因是 grid[1][1] <= 2 。
|
||||
- 时刻 t = 3 ,我们移动到格子 (1,2) ,可以移动的原因是 grid[1][2] <= 3 。
|
||||
- 时刻 t = 4 ,我们移动到格子 (1,1) ,可以移动的原因是 grid[1][1] <= 4 。
|
||||
- 时刻 t = 5 ,我们移动到格子 (1,2) ,可以移动的原因是 grid[1][2] <= 5 。
|
||||
- 时刻 t = 6 ,我们移动到格子 (1,3) ,可以移动的原因是 grid[1][3] <= 6 。
|
||||
- 时刻 t = 7 ,我们移动到格子 (2,3) ,可以移动的原因是 grid[2][3] <= 7 。
|
||||
最终到达时刻为 7 。这是最早可以到达的时间。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<p><img alt="" src="https://assets.leetcode.com/uploads/2023/02/14/yetgriddrawio-9.png" style="width: 151px; height: 151px;" /></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>grid = [[0,2,4],[3,2,1],[1,0,4]]
|
||||
<b>输出:</b>-1
|
||||
<b>解释:</b>没法从左上角按题目规定走到右下角。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>m == grid.length</code></li>
|
||||
<li><code>n == grid[i].length</code></li>
|
||||
<li><code>2 <= m, n <= 1000</code></li>
|
||||
<li><code>4 <= m * n <= 10<sup>5</sup></code></li>
|
||||
<li><code>0 <= grid[i][j] <= 10<sup>5</sup></code></li>
|
||||
<li><code>grid[0][0] == 0</code></li>
|
||||
</ul>
|
@@ -0,0 +1,48 @@
|
||||
<p>给你一个 <strong>二进制字符串</strong> <code>s</code> 和一个整数数组 <code>queries</code> ,其中 <code>queries[i] = [first<sub>i</sub>, second<sub>i</sub>]</code> 。</p>
|
||||
|
||||
<p>对于第 <code>i</code> 个查询,找到 <code>s</code> 的 <strong>最短子字符串</strong> ,它对应的 <strong>十进制</strong>值 <code>val</code> 与 <code>first<sub>i</sub></code> <b>按位异或</b> 得到 <code>second<sub>i</sub></code> ,换言之,<code>val ^ first<sub>i</sub> == second<sub>i</sub></code> 。</p>
|
||||
|
||||
<p>第 <code>i</code> 个查询的答案是子字符串 <code>[left<sub>i</sub>, right<sub>i</sub>]</code> 的两个端点(下标从 <strong>0</strong> 开始),如果不存在这样的子字符串,则答案为 <code>[-1, -1]</code> 。如果有多个答案,请你选择 <code>left<sub>i</sub></code> 最小的一个。</p>
|
||||
|
||||
<p>请你返回一个数组 <code>ans</code> ,其中 <code>ans[i] = [left<sub>i</sub>, right<sub>i</sub>]</code> 是第 <code>i</code> 个查询的答案。</p>
|
||||
|
||||
<p><strong>子字符串</strong> 是一个字符串中一段连续非空的字符序列。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>s = "101101", queries = [[0,5],[1,2]]
|
||||
<b>输出:</b>[[0,2],[2,3]]
|
||||
<b>解释:</b>第一个查询,端点为 <code>[0,2]</code> 的子字符串为 <strong>"101"</strong> ,对应十进制数字 <strong><code>5 ,且</code></strong> <strong><code>5 ^ 0 = 5</code></strong> ,所以第一个查询的答案为 <code>[0,2]。第二个查询中,</code>端点为 <code>[2,3] 的子字符串为 </code><strong>"11" ,对应十进制数字</strong> <strong>3</strong> ,且 <strong>3<code> ^ 1 = 2</code></strong><code> 。所以第二个查询的答案为</code> <code>[2,3]</code> 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>s = "0101", queries = [[12,8]]
|
||||
<b>输出:</b>[[-1,-1]]
|
||||
<b>解释:</b>这个例子中,没有符合查询的答案,所以返回 <code>[-1,-1] 。</code>
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 3:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>s = "1", queries = [[4,5]]
|
||||
<b>输出:</b>[[0,0]]
|
||||
<b>解释:</b>这个例子中,端点为 <code>[0,0]</code> 的子字符串对应的十进制值为 <strong><code>1</code></strong><code> ,且</code> <strong><code>1 ^ 4 = 5</code></strong><code> 。所以答案为</code> <code>[0,0] 。</code>
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= s.length <= 10<sup>4</sup></code></li>
|
||||
<li><code>s[i]</code> 要么是 <code>'0'</code> ,要么是 <code>'1'</code> 。</li>
|
||||
<li><code>1 <= queries.length <= 10<sup>5</sup></code></li>
|
||||
<li><code>0 <= first<sub>i</sub>, second<sub>i</sub> <= 10<sup>9</sup></code></li>
|
||||
</ul>
|
||||
|
||||
<p> </p>
|
@@ -0,0 +1,43 @@
|
||||
<p>给你一个正整数 <code>n</code> ,你可以执行下述操作 <strong>任意</strong> 次:</p>
|
||||
|
||||
<ul>
|
||||
<li><code>n</code> 加上或减去 <code>2</code> 的某个 <strong>幂</strong></li>
|
||||
</ul>
|
||||
|
||||
<p>返回使 <code>n</code> 等于 <code>0</code> 需要执行的 <strong>最少</strong> 操作数。</p>
|
||||
|
||||
<p>如果 <code>x == 2<sup>i</sup></code> 且其中 <code>i >= 0</code> ,则数字 <code>x</code> 是 <code>2</code> 的幂。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>n = 39
|
||||
<strong>输出:</strong>3
|
||||
<strong>解释:</strong>我们可以执行下述操作:
|
||||
- n 加上 2<sup>0</sup> = 1 ,得到 n = 40 。
|
||||
- n 减去 2<sup>3</sup> = 8 ,得到 n = 32 。
|
||||
- n 减去 2<sup>5</sup> = 32 ,得到 n = 0 。
|
||||
可以证明使 n 等于 0 需要执行的最少操作数是 3 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>n = 54
|
||||
<strong>输出:</strong>3
|
||||
<strong>解释:</strong>我们可以执行下述操作:
|
||||
- n 加上 2<sup>1</sup> = 2 ,得到 n = 56 。
|
||||
- n 加上 2<sup>3</sup> = 8 ,得到 n = 64 。
|
||||
- n 减去 2<sup>6</sup> = 64 ,得到 n = 0 。
|
||||
使 n 等于 0 需要执行的最少操作数是 3 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= n <= 10<sup>5</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,42 @@
|
||||
<p>给你一个下标从 <strong>0</strong> 开始的整数数组 <code>nums</code> ,请你找出一个下标从 <strong>0</strong> 开始的整数数组 <code>answer</code> ,其中:</p>
|
||||
|
||||
<ul>
|
||||
<li><code>answer.length == nums.length</code></li>
|
||||
<li><code>answer[i] = |leftSum[i] - rightSum[i]|</code></li>
|
||||
</ul>
|
||||
|
||||
<p>其中:</p>
|
||||
|
||||
<ul>
|
||||
<li><code>leftSum[i]</code> 是数组 <code>nums</code> 中下标 <code>i</code> 左侧元素之和。如果不存在对应的元素,<code>leftSum[i] = 0</code> 。</li>
|
||||
<li><code>rightSum[i]</code> 是数组 <code>nums</code> 中下标 <code>i</code> 右侧元素之和。如果不存在对应的元素,<code>rightSum[i] = 0</code> 。</li>
|
||||
</ul>
|
||||
|
||||
<p>返回数组 <code>answer</code> 。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>nums = [10,4,8,3]
|
||||
<strong>输出:</strong>[15,1,11,22]
|
||||
<strong>解释:</strong>数组 leftSum 为 [0,10,14,22] 且数组 rightSum 为 [15,11,3,0] 。
|
||||
数组 answer 为 [|0 - 15|,|10 - 11|,|14 - 3|,|22 - 0|] = [15,1,11,22] 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>nums = [1]
|
||||
<strong>输出:</strong>[0]
|
||||
<strong>解释:</strong>数组 leftSum 为 [0] 且数组 rightSum 为 [0] 。
|
||||
数组 answer 为 [|0 - 0|] = [0] 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= nums.length <= 1000</code></li>
|
||||
<li><code>1 <= nums[i] <= 10<sup>5</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,39 @@
|
||||
<p>给你一个下标从 <strong>0</strong> 开始的字符串 <code>word</code> ,长度为 <code>n</code> ,由从 <code>0</code> 到 <code>9</code> 的数字组成。另给你一个正整数 <code>m</code> 。</p>
|
||||
|
||||
<p><code>word</code> 的 <strong>可整除数组</strong> <code>div</code> 是一个长度为 <code>n</code> 的整数数组,并满足:</p>
|
||||
|
||||
<ul>
|
||||
<li>如果 <code>word[0,...,i]</code> 所表示的 <strong>数值</strong> 能被 <code>m</code> 整除,<code>div[i] = 1</code></li>
|
||||
<li>否则,<code>div[i] = 0</code></li>
|
||||
</ul>
|
||||
|
||||
<p>返回<em> </em><code>word</code> 的可整除数组。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>word = "998244353", m = 3
|
||||
<strong>输出:</strong>[1,1,0,0,0,1,1,0,0]
|
||||
<strong>解释:</strong>仅有 4 个前缀可以被 3 整除:"9"、"99"、"998244" 和 "9982443" 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>word = "1010", m = 10
|
||||
<strong>输出:</strong>[0,1,0,1]
|
||||
<strong>解释:</strong>仅有 2 个前缀可以被 10 整除:"10" 和 "1010" 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= n <= 10<sup>5</sup></code></li>
|
||||
<li><code>word.length == n</code></li>
|
||||
<li><code>word</code> 由数字 <code>0</code> 到 <code>9</code> 组成</li>
|
||||
<li><code>1 <= m <= 10<sup>9</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,44 @@
|
||||
<p>对任一由 <code>n</code> 个小写英文字母组成的字符串 <code>word</code> ,我们可以定义一个 <code>n x n</code> 的矩阵,并满足:</p>
|
||||
|
||||
<ul>
|
||||
<li><code>lcp[i][j]</code> 等于子字符串 <code>word[i,...,n-1]</code> 和 <code>word[j,...,n-1]</code> 之间的最长公共前缀的长度。</li>
|
||||
</ul>
|
||||
|
||||
<p>给你一个 <code>n x n</code> 的矩阵 <code>lcp</code> 。返回与 <code>lcp</code> 对应的、按字典序最小的字符串 <code>word</code> 。如果不存在这样的字符串,则返回空字符串。</p>
|
||||
|
||||
<p>对于长度相同的两个字符串 <code>a</code> 和 <code>b</code> ,如果在 <code>a</code> 和 <code>b</code> 不同的第一个位置,字符串 <code>a</code> 的字母在字母表中出现的顺序先于 <code>b</code> 中的对应字母,则认为字符串 <code>a</code> 按字典序比字符串 <code>b</code> 小。例如,<code>"aabd"</code> 在字典上小于 <code>"aaca"</code> ,因为二者不同的第一位置是第三个字母,而 <code>'b'</code> 先于 <code>'c'</code> 出现。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>lcp = [[4,0,2,0],[0,3,0,1],[2,0,2,0],[0,1,0,1]]
|
||||
<strong>输出:</strong>"abab"
|
||||
<strong>解释:</strong>lcp 对应由两个交替字母组成的任意 4 字母字符串,字典序最小的是 "abab" 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>lcp = [[4,3,2,1],[3,3,2,1],[2,2,2,1],[1,1,1,1]]
|
||||
<strong>输出:</strong>"aaaa"
|
||||
<strong>解释:</strong>lcp 对应只有一个不同字母的任意 4 字母字符串,字典序最小的是 "aaaa" 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 3:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>lcp = [[4,3,2,1],[3,3,2,1],[2,2,2,1],[1,1,1,3]]
|
||||
<strong>输出:</strong>""
|
||||
<strong>解释:</strong>lcp[3][3] 无法等于 3 ,因为 word[3,...,3] 仅由单个字母组成;因此,不存在答案。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= n == </code><code>lcp.length == </code><code>lcp[i].length</code> <code><= 1000</code></li>
|
||||
<li><code><font face="monospace">0 <= lcp[i][j] <= n</font></code></li>
|
||||
</ul>
|
@@ -0,0 +1,64 @@
|
||||
<p>给你一个下标从 <strong>0</strong> 开始的整数数组 <code>nums</code> 。</p>
|
||||
|
||||
<p>现定义两个数字的 <strong>串联</strong> 是由这两个数值串联起来形成的新数字。</p>
|
||||
|
||||
<ul>
|
||||
<li>例如,<code>15</code><span style=""> 和 </span><code>49</code> 的串联是 <code>1549</code> 。</li>
|
||||
</ul>
|
||||
|
||||
<p><code>nums</code> 的 <strong>串联值</strong> 最初等于 <code>0</code> 。执行下述操作直到 <code>nums</code> 变为空:</p>
|
||||
|
||||
<ul>
|
||||
<li>如果 <code>nums</code> 中存在不止一个数字,分别选中 <code>nums</code> 中的第一个元素和最后一个元素,将二者串联得到的值加到 <code>nums</code> 的 <strong>串联值</strong> 上,然后从 <code>nums</code> 中删除第一个和最后一个元素。</li>
|
||||
<li>如果仅存在一个元素,则将该元素的值加到 <code>nums</code> 的串联值上,然后删除这个元素。</li>
|
||||
</ul>
|
||||
|
||||
<p>返回执行完所有操作后<em> </em><code>nums</code> 的串联值。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>nums = [7,52,2,4]
|
||||
<b>输出:</b>596
|
||||
<b>解释:</b>在执行任一步操作前,nums 为 [7,52,2,4] ,串联值为 0 。
|
||||
- 在第一步操作中:
|
||||
我们选中第一个元素 7 和最后一个元素 4 。
|
||||
二者的串联是 74 ,将其加到串联值上,所以串联值等于 74 。
|
||||
接着我们从 nums 中移除这两个元素,所以 nums 变为 [52,2] 。
|
||||
- 在第二步操作中:
|
||||
我们选中第一个元素 52 和最后一个元素 2 。
|
||||
二者的串联是 522 ,将其加到串联值上,所以串联值等于 596 。
|
||||
接着我们从 nums 中移除这两个元素,所以 nums 变为空。
|
||||
由于串联值等于 596 ,所以答案就是 596 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>nums = [5,14,13,8,12]
|
||||
<b>输出:</b>673
|
||||
<b>解释:</b>在执行任一步操作前,nums 为 [5,14,13,8,12] ,串联值为 0 。
|
||||
- 在第一步操作中:
|
||||
我们选中第一个元素 5 和最后一个元素 12 。
|
||||
二者的串联是 512 ,将其加到串联值上,所以串联值等于 512 。
|
||||
接着我们从 nums 中移除这两个元素,所以 nums 变为 [14,13,8] 。
|
||||
- 在第二步操作中:
|
||||
我们选中第一个元素 14 和最后一个元素 8 。
|
||||
二者的串联是 148 ,将其加到串联值上,所以串联值等于 660 。
|
||||
接着我们从 nums 中移除这两个元素,所以 nums 变为 [13] 。
|
||||
- 在第三步操作中:
|
||||
nums 只有一个元素,所以我们选中 13 并将其加到串联值上,所以串联值等于 673 。
|
||||
接着我们从 nums 中移除这个元素,所以 nums 变为空。
|
||||
由于串联值等于 673 ,所以答案就是 673 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= nums.length <= 1000</code></li>
|
||||
<li><code>1 <= nums[i] <= 10<sup>4</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,40 @@
|
||||
<p>给你一个正整数数组 <code>nums</code> 。</p>
|
||||
|
||||
<p>如果数组 <code>nums</code> 的子集中的元素乘积是一个 <strong>无平方因子数</strong> ,则认为该子集是一个 <strong>无平方</strong> 子集。</p>
|
||||
|
||||
<p><strong>无平方因子数</strong> 是无法被除 <code>1</code> 之外任何平方数整除的数字。</p>
|
||||
|
||||
<p>返回数组 <code>nums</code> 中 <strong>无平方</strong> 且 <strong>非空</strong> 的子集数目。因为答案可能很大,返回对 <code>10<sup>9</sup> + 7</code> 取余的结果。</p>
|
||||
|
||||
<p><code>nums</code> 的 <strong>非空子集</strong> 是可以由删除 <code>nums</code> 中一些元素(可以不删除,但不能全部删除)得到的一个数组。如果构成两个子集时选择删除的下标不同,则认为这两个子集不同。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>nums = [3,4,4,5]
|
||||
<strong>输出:</strong>3
|
||||
<strong>解释:</strong>示例中有 3 个无平方子集:
|
||||
- 由第 0 个元素 [3] 组成的子集。其元素的乘积是 3 ,这是一个无平方因子数。
|
||||
- 由第 3 个元素 [5] 组成的子集。其元素的乘积是 5 ,这是一个无平方因子数。
|
||||
- 由第 0 个和第 3 个元素 [3,5] 组成的子集。其元素的乘积是 15 ,这是一个无平方因子数。
|
||||
可以证明给定数组中不存在超过 3 个无平方子集。</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>nums = [1]
|
||||
<strong>输出:</strong>1
|
||||
<strong>解释:</strong>示例中有 1 个无平方子集:
|
||||
- 由第 0 个元素 [1] 组成的子集。其元素的乘积是 1 ,这是一个无平方因子数。
|
||||
可以证明给定数组中不存在超过 1 个无平方子集。</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= nums.length <= 1000</code></li>
|
||||
<li><code>1 <= nums[i] <= 30</code></li>
|
||||
</ul>
|
@@ -0,0 +1,42 @@
|
||||
<p>给你两个下标从 <strong>0</strong> 开始的数组 <code>nums1</code> 和 <code>nums2</code> ,和一个二维数组 <code>queries</code> 表示一些操作。总共有 3 种类型的操作:</p>
|
||||
|
||||
<ol>
|
||||
<li>操作类型 1 为 <code>queries[i] = [1, l, r]</code> 。你需要将 <code>nums1</code> 从下标 <code>l</code> 到下标 <code>r</code> 的所有 <code>0</code> 反转成 <code>1</code> 或将 <code>1</code> 反转成 <code>0</code> 。<code>l</code> 和 <code>r</code> 下标都从 <strong>0</strong> 开始。</li>
|
||||
<li>操作类型 2 为 <code>queries[i] = [2, p, 0]</code> 。对于 <code>0 <= i < n</code> 中的所有下标,令 <code>nums2[i] = nums2[i] + nums1[i] * p</code> 。</li>
|
||||
<li>操作类型 3 为 <code>queries[i] = [3, 0, 0]</code> 。求 <code>nums2</code> 中所有元素的和。</li>
|
||||
</ol>
|
||||
|
||||
<p>请你返回一个数组,包含所有第三种操作类型的答案。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>nums1 = [1,0,1], nums2 = [0,0,0], queries = [[1,1,1],[2,1,0],[3,0,0]]
|
||||
<b>输出:</b>[3]
|
||||
<strong>解释:</strong>第一个操作后 nums1 变为 [1,1,1] 。第二个操作后,nums2 变成 [1,1,1] ,所以第三个操作的答案为 3 。所以返回 [3] 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>nums1 = [1], nums2 = [5], queries = [[2,0,0],[3,0,0]]
|
||||
<b>输出:</b>[5]
|
||||
<b>解释:</b>第一个操作后,nums2 保持不变为 [5] ,所以第二个操作的答案是 5 。所以返回 [5] 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= nums1.length,nums2.length <= 10<sup>5</sup></code></li>
|
||||
<li><code>nums1.length = nums2.length</code></li>
|
||||
<li><code>1 <= queries.length <= 10<sup>5</sup></code></li>
|
||||
<li><code>queries[i].length = 3</code></li>
|
||||
<li><code>0 <= l <= r <= nums1.length - 1</code></li>
|
||||
<li><code>0 <= p <= 10<sup>6</sup></code></li>
|
||||
<li><code>0 <= nums1[i] <= 1</code></li>
|
||||
<li><code>0 <= nums2[i] <= 10<sup>9</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,43 @@
|
||||
<p>给你一个整数 <code>num</code> 。你知道 Danny Mittal 会偷偷将 <code>0</code> 到 <code>9</code> 中的一个数字 <strong>替换</strong> 成另一个数字。</p>
|
||||
|
||||
<p>请你返回将 <code>num</code> 中 <strong>恰好一个</strong> 数字进行替换后,得到的最大值和最小值的差位多少。</p>
|
||||
|
||||
<p><strong>注意:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li>当 Danny 将一个数字 <code>d1</code> 替换成另一个数字 <code>d2</code> 时,Danny 需要将 <code>nums</code> 中所有 <code>d1</code> 都替换成 <code>d2</code> 。</li>
|
||||
<li>Danny 可以将一个数字替换成它自己,也就是说 <code>num</code> 可以不变。</li>
|
||||
<li>Danny 可以将数字分别替换成两个不同的数字分别得到最大值和最小值。</li>
|
||||
<li>替换后得到的数字可以包含前导 0 。</li>
|
||||
<li>Danny Mittal 获得周赛 326 前 10 名,让我们恭喜他。</li>
|
||||
</ul>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>num = 11891
|
||||
<b>输出:</b>99009
|
||||
<b>解释:</b>
|
||||
为了得到最大值,我们将数字 1 替换成数字 9 ,得到 99899 。
|
||||
为了得到最小值,我们将数字 1 替换成数字 0 ,得到 890 。
|
||||
两个数字的差值为 99009 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>num = 90
|
||||
<b>输出:</b>99
|
||||
<strong>解释:</strong>
|
||||
可以得到的最大值是 99(将 0 替换成 9),最小值是 0(将 9 替换成 0)。
|
||||
所以我们得到 99 。</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= num <= 10<sup>8</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,30 @@
|
||||
<p>给你一个下标从 <strong>0</strong> 开始的整数数组 <code>nums</code> 。</p>
|
||||
|
||||
<p>如果存在一些整数满足 <code>0 <= index<sub>1</sub> < index<sub>2</sub> < ... < index<sub>k</sub> < nums.length</code> ,得到 <code>nums[index<sub>1</sub>] | nums[index<sub>2</sub>] | ... | nums[index<sub>k</sub>] = x</code> ,那么我们说 <code>x</code> 是 <strong>可表达的</strong> 。换言之,如果一个整数能由 <code>nums</code> 的某个子序列的或运算得到,那么它就是可表达的。</p>
|
||||
|
||||
<p>请你返回 <code>nums</code> 不可表达的 <strong>最小非零整数</strong> 。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>nums = [2,1]
|
||||
<b>输出:</b>4
|
||||
<b>解释:</b>1 和 2 已经在数组中,因为 nums[0] | nums[1] = 2 | 1 = 3 ,所以 3 是可表达的。由于 4 是不可表达的,所以我们返回 4 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>nums = [5,3,2]
|
||||
<b>输出:</b>1
|
||||
<b>解释:</b>1 是最小不可表达的数字。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= nums.length <= 10<sup>5</sup></code></li>
|
||||
<li><code>1 <= nums[i] <= 10<sup>9</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,49 @@
|
||||
<p>给你两个字符串 <code>s</code> 和 <code>t</code> 。</p>
|
||||
|
||||
<p>你可以从字符串 <code>t</code> 中删除任意数目的字符。</p>
|
||||
|
||||
<p>如果没有从字符串 <code>t</code> 中删除字符,那么得分为 <code>0</code> ,否则:</p>
|
||||
|
||||
<ul>
|
||||
<li>令 <code>left</code> 为删除字符中的最小下标。</li>
|
||||
<li>令 <code>right</code> 为删除字符中的最大下标。</li>
|
||||
</ul>
|
||||
|
||||
<p>字符串的得分为 <code>right - left + 1</code> 。</p>
|
||||
|
||||
<p>请你返回使<em> </em><code>t</code><em> </em>成为<em> </em><code>s</code> 子序列的最小得分。</p>
|
||||
|
||||
<p>一个字符串的 <strong>子序列</strong> 是从原字符串中删除一些字符后(也可以一个也不删除),剩余字符不改变顺序得到的字符串。(比方说 <code>"ace"</code> 是 <code>"<strong><em>a</em></strong>b<strong><em>c</em></strong>d<strong><em>e</em></strong>"</code> 的子序列,但是 <code>"aec"</code> 不是)。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>s = "abacaba", t = "bzaa"
|
||||
<b>输出:</b>1
|
||||
<b>解释:</b>这个例子中,我们删除下标 1 处的字符 "z" (下标从 0 开始)。
|
||||
字符串 t 变为 "baa" ,它是字符串 "abacaba" 的子序列,得分为 1 - 1 + 1 = 1 。
|
||||
1 是能得到的最小得分。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>s = "cde", t = "xyz"
|
||||
<b>输出:</b>3
|
||||
<b>解释:</b>这个例子中,我们将下标为 0, 1 和 2 处的字符 "x" ,"y" 和 "z" 删除(下标从 0 开始)。
|
||||
字符串变成 "" ,它是字符串 "cde" 的子序列,得分为 2 - 0 + 1 = 3 。
|
||||
3 是能得到的最小得分。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= s.length, t.length <= 10<sup>5</sup></code></li>
|
||||
<li><code>s</code> 和 <code>t</code> 都只包含小写英文字母。</li>
|
||||
</ul>
|
||||
|
||||
<p> </p>
|
@@ -0,0 +1,47 @@
|
||||
<p>给你一个下标从 <strong>0</strong> 开始的整数数组 <code>nums</code> 。</p>
|
||||
|
||||
<p>一开始,所有下标都没有被标记。你可以执行以下操作任意次:</p>
|
||||
|
||||
<ul>
|
||||
<li>选择两个 <strong>互不相同且未标记</strong> 的下标 <code>i</code> 和 <code>j</code> ,满足 <code>2 * nums[i] <= nums[j]</code> ,标记下标 <code>i</code> 和 <code>j</code> 。</li>
|
||||
</ul>
|
||||
|
||||
<p>请你执行上述操作任意次,返回<em> </em><code>nums</code> 中最多可以标记的下标数目。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>nums = [3,5,2,4]
|
||||
<b>输出:</b>2
|
||||
<strong>解释:</strong>第一次操作中,选择 i = 2 和 j = 1 ,操作可以执行的原因是 2 * nums[2] <= nums[1] ,标记下标 2 和 1 。
|
||||
没有其他更多可执行的操作,所以答案为 2 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>nums = [9,2,5,4]
|
||||
<b>输出:</b>4
|
||||
<strong>解释:</strong>第一次操作中,选择 i = 3 和 j = 0 ,操作可以执行的原因是 2 * nums[3] <= nums[0] ,标记下标 3 和 0 。
|
||||
第二次操作中,选择 i = 1 和 j = 2 ,操作可以执行的原因是 2 * nums[1] <= nums[2] ,标记下标 1 和 2 。
|
||||
没有其他更多可执行的操作,所以答案为 4 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 3:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>nums = [7,6,8]
|
||||
<b>输出:</b>0
|
||||
<strong>解释:</strong>没有任何可以执行的操作,所以答案为 0 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= nums.length <= 10<sup>5</sup></code></li>
|
||||
<li><code>1 <= nums[i] <= 10<sup>9</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,37 @@
|
||||
<p>给你一个下标从 <strong>0</strong> 开始、长度为 <code>n</code> 的整数数组 <code>nums</code> ,和两个整数 <code>lower</code> 和 <code>upper</code> ,返回 <strong>公平数对的数目</strong> 。</p>
|
||||
|
||||
<p>如果 <code>(i, j)</code> 数对满足以下情况,则认为它是一个 <strong>公平数对</strong> :</p>
|
||||
|
||||
<ul>
|
||||
<li><code>0 <= i < j < n</code>,且</li>
|
||||
<li><code>lower <= nums[i] + nums[j] <= upper</code></li>
|
||||
</ul>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><b>示例 1:</b></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>nums = [0,1,7,4,4,5], lower = 3, upper = 6
|
||||
<b>输出:</b>6
|
||||
<b>解释:</b>共计 6 个公平数对:(0,3)、(0,4)、(0,5)、(1,3)、(1,4) 和 (1,5) 。
|
||||
</pre>
|
||||
|
||||
<p><b>示例 2:</b></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>nums = [1,7,9,2,5], lower = 11, upper = 11
|
||||
<b>输出:</b>1
|
||||
<b>解释:</b>只有单个公平数对:(2,3) 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= nums.length <= 10<sup>5</sup></code></li>
|
||||
<li><code>nums.length == n</code></li>
|
||||
<li><code>-10<sup>9</sup> <= nums[i] <= 10<sup>9</sup></code></li>
|
||||
<li><code>-10<sup>9</sup> <= lower <= upper <= 10<sup>9</sup></code></li>
|
||||
</ul>
|
Reference in New Issue
Block a user