北京寶利通公司4道面試題

1) 給定兩個字符串,如果一個字符串是另一個字符串的結尾部分相同則返回1,否則返回0, 如 abcddde   dde  則返回1 ;如 abcddde   dce  則返回0

思路:用String類中的endsWith判斷一下即可搞定。

 

2)  給定一個字符串將其中連續的四個空格換成tab鍵。

思路:用String中的replaceAll替換空格爲tab

 

3)  F(n)=1+1/1的階乘+1/2的階乘+1/3的階乘+…..1/n的階乘。

思路:

  //求出1/n的階乘

  public static double oneJiecheng(int n)
 {
    double d = 1.0;
    for(int i = 0; i < n;i++)
    {
       d *= 1.0/(i+1);
    }
    return d;
 }

 //將各個1/n的階乘相加即可

 public static double jiechengSunfa(int n)
 {
     double returnValue = 1.0;
    for (int i =0 ; i < n; i++)
    {
         returnValue += oneJiecheng(i+1);
    }
      return returnValue;
 }
 

4)  任意給定一個數字數組,找出其中和最大的連續子數組,如 1 2 3 -1 3 4   最大和數組 3 4。

(注)這裏重點討論一下這個題目的算法,不知道大家是否想到其他的好的算法。現在我將自己想到的這個笨算法跟大家介紹一下。

思路:a.判斷數組中的數字是否全是負數,如果是,找出最大的負數來,並轉化成數組,即最大的連續子數組;

         b.把數組中的數字轉化成字符串,判斷如果改數字爲負數,則用空格來分開,否則用逗號隔開,如“1,2,3,-1 3,4”;

         c.用字符串分隔處理空格,將此字符串變成一字符串數組,循環此字符串數組中的各個字符串,並遞歸處理數據,直到最後一個字符不能爲負爲止,值相加進行比較判斷,找出最大的值來,並記錄此值對應的數值,此最大值即由最大的連續數組的值相加得來的。

實現:

         public static int getArray(int[] array,int param)
        {
            int p = param;
            if (param < 0)
               return 0;
            if(array[param] < 0)
            {
               p = param - 1;
               return getArray(array,p);
            } 
            return p;
        }
        public static int[] findSubArray(int[] intArray)
       {
          //數組中全部是負數的情況
          int flag = 0;
          for(int i = 0; i < intArray.length;i++)
         {
             if(intArray[i] < 0)
            {
                flag++;
            }
         }
         if(flag == intArray.length)
         {
              int index = intArray[0];
              for(int i = 1; i < intArray.length; i++)
             {
                 if(index < intArray[i])
                  {
                       index = intArray[i];
                  }
            }
            return new int[]{index};
          }  

          //其他情況
         String strTemp = "";
          for(int i = 0; i < intArray.length;i++)
          {
                if(intArray[i] < 0)
               {
                    strTemp += intArray[i] + " ";
               }
                else
               {
                     strTemp += intArray[i] + ",";
               }
   
           }
          if(!strTemp.equals(""))
          {
               strTemp = strTemp.substring(0, strTemp.length()-1);
          }
          String[] flagArray = strTemp.split(" ");
          int[] returnValue = new int[10];
          int paTemp = 0;
          for(int i = 0; i < flagArray.length; i++)
         {
               String[] flagArray1 = flagArray[i].split(",");
               int[] intLength = new int[flagArray1.length];
              for(int j = 0; j < flagArray1.length;j++)
              {
                   intLength[j] = Integer.parseInt(flagArray1[j]);
              }
              int t = getArray(intLength,intLength.length-1);
              int[] destArray = new int[t+1];
              System.arraycopy(intLength, 0, destArray, 0, t+1);
   
              int temp = 0;  
              for(int k = 0; k < destArray.length; k++)
             {
                 temp += destArray[k];
             }
             if(paTemp < temp)
             {
                 returnValue = destArray;
                 paTemp = temp;
             }
   
         }
         return returnValue;
     }

測試:

 int[] test1 = {1,2,3,-1,3,4};
 int[] get1 = findSubArray(test1);
 for(int i = 0; i < get1.length; i++)
 {
  System.out.print(get1[i] + " ");
 }
 System.out.println("/n-------------");
 int[] test2 = {-1,-2,-3,-4};
 int[] get2 = findSubArray(test2);
 for(int i = 0; i < get2.length; i++)
 {
  System.out.print(get2[i] + " ");
 }
 System.out.println("/n-------------");
 int[] test3 = {-1,6,-3,-8,4,3,-6,-8};
 int[] get3 = findSubArray(test3);
 for(int i = 0; i < get3.length; i++)
 {
  System.out.print(get3[i] + " ");
 }

運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章