北京寶利通公司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] + " ");
}
執行結果: