创新工场笔试最后两道题
前几天创新工场来学校开宣讲会招聘,至少有1100多人参加了笔试, 招的人又那么少,简直就是充当炮灰去了~
记住了最后两道题目,如下
第一题:字符串去重,要求不能开辟新空间用来复制原字符串,比如字符串为"abddscbd",去重复后就是"abdsc"
粘一点自己写的代码,写的比较复杂凌乱,新手~~
1 /** 2 * 判断一个字符在字符串中是否重复了两次以上 3 * @return 重复了两次或两次以上就返回true,否则返回false 4 */ 5 private static boolean tooMany(String str, char ch) { 6 int len = str.length(); 7 int count = 0; 8 for (int i = 0; i < len; i++) { 9 if (str.charAt(i) == ch) { 10 count++; 11 } 12 } 13 return (count > 1) ? true : false; 14 } 15 16 /** 17 * 判断字符串中是否有所含的字符 18 */ 19 private static boolean contain(String str, char ch) { 20 boolean flag = false; 21 for (int i = 0; i < str.length(); i++) { 22 if (str.charAt(i) == ch) 23 flag = true; 24 } 25 return flag; 26 } 27 28 public static String toLessStr(String str) { 29 int i = 0; 30 while ((str.length() - i) > 0) { 31 char ch = str.charAt(i); 32 if (tooMany(str, ch) && (i >= 1)) { 33 if (contain(str.substring(0, i), str.charAt(i))) { 34 str = str.substring(0, i) + str.substring(i + 1); 35 } else { 36 i++; 37 } 38 } else { 39 i++; 40 } 41 } 42 return str; 43 } 44 45 public static void main(String[] args) { 46 // TODO Auto-generated method stub 47 System.out.println(toLessStr("aacddsdae")); //输出 acdse 48 }
第二题:求逆序对个数,在一个数组a里,如果i < j,a[i]>a[j],那么<a[i],a[j]>称为一个逆序对,如3,5,1,2 一共有<3,1><3,2><5,1><5,2>四个逆序对
1 /** 2 * 数组的反序的个数 3 * @return 返回个数 4 */ 5 static int ArrayTest(int[] arr){ 6 if(arr.length<=1) 7 throw new IllegalArgumentException("数组小于零"); 8 int len=arr.length; 9 int count=0; 10 for(int i=0;i<len-1;i++){ 11 for(int j=i+1;j<len;j++){ 12 if(arr[i]>arr[j]){ 13 count++; 14 } 15 } 16 } 17 return count; 18 } 19 public static void main(String[] args) { 20 // TODO Auto-generated method stub 21 int[] a={5,2,3,4,9,1,6}; 22 System.out.println(ArrayTest(a)); //输出 9 23 }