<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實(shí)戰(zhàn)330:按要求補(bǔ)齊數(shù)組

          共 2566字,需瀏覽 6分鐘

           ·

          2021-07-27 01:04

          算法的重要性,我就不多說(shuō)了吧,想去大廠,就必須要經(jīng)過(guò)基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問(wèn)題叫做 按要求補(bǔ)齊數(shù)組,我們先來(lái)看題面:
          https://leetcode-cn.com/problems/patching-array/

          Given a sorted integer array nums and an integer n, add/patch elements to the array such that any number in the range [1, n] inclusive can be formed by the sum of some elements in the array.

          Return the minimum number of patches required.

          給定一個(gè)已排序的正整數(shù)數(shù)組 nums,和一個(gè)正整數(shù) n 。從 [1, n] 區(qū)間內(nèi)選取任意個(gè)數(shù)字補(bǔ)充到 nums 中,使得 [1, n] 區(qū)間內(nèi)的任何數(shù)字都可以用 nums 中某幾個(gè)數(shù)字的和來(lái)表示。請(qǐng)輸出滿足上述要求的最少需要補(bǔ)充的數(shù)字個(gè)數(shù)。

          示例


          示例 1:

          輸入: nums = [1,3], n = 6
          輸出: 1
          解釋:
          根據(jù) nums 里現(xiàn)有的組合 [1], [3], [1,3],可以得出 1, 3, 4。
          現(xiàn)在如果我們將 2 添加到 nums 中, 組合變?yōu)? [1], [2], [3], [1,3], [2,3], [1,2,3]。
          其和可以表示數(shù)字 1, 2, 3, 4, 5, 6,能夠覆蓋 [1, 6] 區(qū)間里所有的數(shù)。
          所以我們最少需要添加一個(gè)數(shù)字。

          示例 2:

          輸入: nums = [1,5,10], n = 20
          輸出: 2
          解釋: 我們需要添加 [2, 4]。

          示例 3:

          輸入: nums = [1,2,2], n = 5
          輸出: 0


          解題


          維護(hù)一個(gè)邊界值range,使得數(shù)組內(nèi)數(shù)字可達(dá)范圍為[1,range),當(dāng)i < nums.length且range >= nums[i] 時(shí)說(shuō)明此時(shí)數(shù)組中的值仍然在可達(dá)范圍中,那么只需要range = range + nums[i]讓目前的可達(dá)范圍變成[1,range + nums[i])即可,否則要讓range += range來(lái)使得此時(shí)的可達(dá)范圍變成[1, 2range) -> [1,range) ∪ [1 + range, range + range),直到range > n后可退出循環(huán) 。

          class Solution {
              public int minPatches(int[] nums, int n) {
                  int i = 0, count = 0;
                  long range = 1;

                  while(range <= n) {
                      if(i < nums.length && nums[i] <= range) range += nums[i++];
                      else {
                          range += range;
                          count++;
                      }
                  }
                  
                  return count;
              }
          }


          好了,今天的文章就到這里,如果覺(jué)得有所收獲,請(qǐng)順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力 。

          上期推文:

          LeetCode1-320題匯總,希望對(duì)你有點(diǎn)幫助!

          LeetCode刷題實(shí)戰(zhàn)321:拼接最大數(shù)

          LeetCode刷題實(shí)戰(zhàn)322:零錢(qián)兌換

          LeetCode刷題實(shí)戰(zhàn)323:無(wú)向圖中連通分量的數(shù)目

          LeetCode刷題實(shí)戰(zhàn)324:擺動(dòng)排序 II

          LeetCode刷題實(shí)戰(zhàn)325:和等于 k 的最長(zhǎng)子數(shù)組長(zhǎng)度

          LeetCode刷題實(shí)戰(zhàn)326:3的冪
          LeetCode刷題實(shí)戰(zhàn)327:區(qū)間和的個(gè)數(shù)
          LeetCode刷題實(shí)戰(zhàn)328:奇偶鏈表
          LeetCode刷題實(shí)戰(zhàn)329:矩陣中的最長(zhǎng)遞增路徑

          瀏覽 49
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91.天堂网| 国内三级视频 | 黄色大尺度视频 | 一级二级三级在线观看 | 国产三级久久久精品麻豆三级 |