LeetCode Can Place Flowers(種花問題)


この2、3日ずっと面接があるので、ブログを更新する暇がありませんでしたが、ずっと問題を作っていました.実は、一定の習慣を身につけさえすれば、いつかACのいくつかの問題が少なく感じられるかもしれません.だから、プログラミング能力も自然に大きく向上します.今日は皆さんと面白い問題を共有します.ここでは花の問題と呼んでいます.以下はLeetCodeのテーマの説明です.
Suppose you have a long flowerbed in which some of the plots are planted and some are not. However, flowers cannot be planted in adjacent plots - they would compete for water and both would die.
Given a flowerbed (represented as an array containing 0 and 1, where 0 means empty and 1 means not empty), and a number n, return if n new flowers can be planted in it without violating the no-adjacent-flowers rule.
Example 1:
Input: flowerbed = [1,0,0,0,1], n = 1
Output: True

Example 2:
Input: flowerbed = [1,0,0,0,1], n = 2
Output: False

Note:
  • The input array won't violate no-adjacent-flowers rule.
  • The input array size is in the range of [1, 20000].
  • n is a non-negative integer which won't exceed the input array size.

  • この問題は私たちに01配列を与えて、その中の1はすでに花を放したことを表して、0は花を置くことができる位置を表して、しかし1つの制限条件は隣接する花があることができません.では簡単な例として、連続するゼロ、000が3つあれば、何鉢の花を入れることができるのかというと、実は左右の位置によって決まるのですが、10001であれば1鉢しか入れられず、左右が境界の花であれば、2鉢、101を置くことができるので、連続0の個数を計算して、花を入れることができる個数を直接算出したいなら、境界を処理しなければなりません.処理方法は、先頭位置が0であれば、前に0を加え、最後の位置が0であれば、一番後ろに0を加える.2つの1の間の0の個数は挿入可能な1の数と相関し、相関関係はsum=(count-1)/2であり、countは2つの1の間の局所0の個数であり、sumはこの局所挿入可能な1の個数である.では、このような解題の構想があれば、コードを実現するのも難しくないと思います.次は私のACコードです.
    package com.gaoxue.LeetCode;
    
    public class CanPlaceFlowers {
    
    	public boolean canPlaceFlowers(int[] flowerbed, int n) {  
            StringBuilder sb = new StringBuilder();  
            sb.append(0);  
            for(int i = 0;i
         
    このコードの理解は比较的に简単であるべきだと信じて、だから私は注釈をしないで、コードは完全に上述の解題の考え方によって完成したので、また、ここで私はみんなにこの问题が贪欲なアルゴリズムで解决することができることを提案して、しかしコードの実现は私はやはりみんながすべて自分で多く考えてみることができることを望んで、后の博文の中で私はこれらの残した问题に対して详しく绍介しますみんなはまず自分で実现してからもう一つの探求をしてみることができて、要するに今日の事、今日终わって、みんなは自分の情况によって1つの合理的な学习の计画を制定することができて、みんなが更に1阶に上がることができることを望んで、いっしょに进歩します~