練習の毎日のアルゴリズム(2020年1月10日)

 

 

 ソリューションのアイデアは、解決策は、暴力の使用かもしれませんが、時間の複雑さは、時間の複雑さはO(N)、それは推奨されませんされてより多くを費やし、Iダブルポインタ方式、すなわち、2つのヘッドとテールポインタ、ヘッドポインタである少ないテールポインタよりも、ヘッド・ポインタが終了後、ポインタの移動または移動された後に

コードは以下の通りです

パッケージcom.qyx.Treeを。
/ **
 *非負整数A1、A2 Nが与えられると、...、ポイント(iは、AI)各座標の数を表します。
 垂直座標内の動画* n行は、私は2つのエンドポイントは、(i、AI)及び(I、0)は垂直線です。
 *一緒に容器と、x軸の構成は水を収容できるように、2本のラインを見つけます。
        注:あなたは、コンテナを傾けることができない、とnの値が2以上です。
 * @author QYX
 *
 * / 
パブリック クラスMaxArea {
     // ブルート力
     // これは、空間複雑性O(1)であり、時間の複雑さはO(N ^ 2)であり、
    公共 INT maxArea01(INT []高さ)
    {
        int型 maxArea = 0 ;
        以下のためにint型 ; I <height.length、私は0を= I ++ 
        {
            以下のためのint型 J = + 1; J <height.lengthあり、j ++ 
            {
                maxArea = Math.max(maxArea、Math.min(身長[I]、高さ[J])*(J- I))。
            }
        }
        返すmaxAreaを。
    }
    // ダブルポインタ方式(ダブルポイント)
    / * 空間の複雑さはO(1)であり、時間の複雑さはO(N)である* / 
    パブリック INT maxArea02(INT []高さ)
    {
        INT maxArea = 0、L = 0、R = height.length-1 一方、(L < R)
        {
            maxArea = Math.max(maxArea、Math.min(高さ[L]、高さ[R])*(R- L))。
            もし(高さ[L] < 高さ[R])
            {
                L ++ ;
            } {
                R - ;
            }
        }
        返すmaxAreaを。
    }
}

2番目の質問

 

 

私は次のようにコードは、貪欲なアルゴリズムを使用しました

パッケージcom.qyx.Treeを。

輸入javax.management.relation.Role;
/ **
 次の7つを含む*ローマ数字文字:I、V、X、L、C、D及びM.

文字の値
I 1
5 V
X 10
L 50
C 100
D 500
M 1000年
例えば、ローマ数字2 IIのように書く、X + IIである二つの平行1.12 XII、として書かなければなりません。図27は、XXVII、即ちXX + V + IIのように書きます。
一般的に、大量に右にローマ数字の数が少ないです。しかし、例外もある、例えば、4 IIIIを書きますが、IVはありません。左番号5番号1において、多数の数が4を得た少ない数5で表される値に等しいです。
同様に、数9は、IXで表されます。この特別なルールは以下の6つのケースにのみ適用されます。
私は、左V(5)とX(10)上にあってもよく、及び4,9を表現します。
X Lは、左(50)及びC(100)上に配置することができ、そして40と90が示されています。 
Cは、400と900表すために、左側にD(500)とM(1000)上に配置することができます。
整数を考えると、ローマ数字に変換します。入力は3999から1の範囲にあることを保証します。
 * @author QYX
 *
 */
public class LuMaNumberTransaction {
    //使用贪心算法进行整数转罗马数
    public String IntTransationLuMaNumber(int num)
    {
        String str="";
                                //1000 100 10 1 500 50 5
        char[] romes=new char[]{'M','C','X','I','D','L','V'};
        int[] num_split=new int[4];
        int count=3;
        while(count>=0)
        {
            //依次计算得出万位,千位,百位及个位,并将其存入数组
            num_split[count]=num%10;
            num=num/10;
            count--;
        }
        for(int i=0;i<4;i++)
        {
            switch(num_split[i])
            {
            case 4:
                str=str+romes[i]+romes[3+i];
                break;
            
            case 9:
                str=str+romes[i]+romes[i-1];
                break;
            default:
                if(num_split[i]<5)
                {
                    for(int j=0;j<num_split[i];j++)
                    {
                        str=str+romes[i];
                    }
                }else{
                    str=str+romes[3+i];
                    for(int j=0;j<num_split[i]-5;j++)
                    {
                        str=str+romes[i];
                    }
                }
            }
        }
        return str;
    }
    public String IntTransactionLuMaNumber02(int num)
    {
        //准备接受字符串
        String str="";
        int count=3;
        int[] num_split=new int[4];
        char[] cs=new char[]{'M','C','X','I','D','L','V'};
        while(count>=0)
        {
            num_split[count]=num%10;
            num=num/10;
            count--;
        }
        for(int i=0;i<4;i++)
        {
            switch (num_split[i]) {
            case 4:
                str=str+cs[i]+cs[3+i];
                break;
            case 9:
                str=str+cs[i]+cs[i-1];
            default:
                if(num_split[i]<5)
                {
                    for(int j=0;j<num_split[i];j++)
                    {
                        str=str+cs[i];
                    }
                }else{
                    //先加上5
                    str=str+cs[3+i];
                    for(int j=0;j<num_split[i]-5;j++)//因为前面已经加5了,所以这里要减5
                    {
                        str=str+cs[i];
                    }
                }
            }
        }
        return str;
    }
  }

 

 

 

おすすめ

転載: www.cnblogs.com/qyx66/p/12177850.html