论坛首页 招聘求职论坛

迅雷亲历面经:笔试+上机+面试(完整JAVA面试题求解大讨论)

浏览 90486 次
该帖已经被评为精华帖
作者 正文
   发表时间:2009-11-30   最后修改:2009-11-30
2)假如有字符串“6sabcsssfsfs33” ,用最有快速的方法去掉字符“ab3”,不能用java内置字符串方法(indeOf,substring,replaceAll等)?

public class ReplaceChar {

	public static void main(String[] args) {
		String target = "ab3";
		String content = "rfwab3teab3ab3ab3ab3ab3tesabte";
		char[] replace = target.toCharArray();
		char[] data = content.toCharArray();
		char[] result = new char[data.length];
		int size = 0;
		for (int i = 0; i < data.length; i++) {
			if (data[i] == replace[0]) {
				boolean isMatch = true;
				for (int j = 1; j < replace.length; j++) {
					if (data[i + j] != replace[j]) {
						isMatch = false;
						break;
					}
				}
				if (isMatch) {
					i += replace.length - 1;
				} else {
					result[size++] = data[i];
				}
			} else {
				result[size++] = data[i];
			}
		}
		String str = new String(result, 0, size);
		System.out.println(str);
	}
}
0 请登录后投票
   发表时间:2009-11-30  
8、描术算法,如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。内存只有1G???
9、在1亿条用户记录里,如何快速查询统计出看了5个电影以上的用户?

怎么处理????
0 请登录后投票
   发表时间:2009-11-30  
egmacross 写道
2)假如有字符串“6sabcsssfsfs33” ,用最有快速的方法去掉字符“ab3”,不能用java内置字符串方法(indeOf,substring,replaceAll等)?

这个不用内置的能有啥好方法吗?

public static main(String[] args){
  System.out.print("6scsssfsfs");
}

应该没有比这个更快的了
0 请登录后投票
   发表时间:2009-11-30   最后修改:2009-11-30
2)假如有字符串“6sabcsssfsfs33” ,用最(有)快速的方法去掉字符“a”,“b”,“3”(字符串“ab3”),不能用java内置字符串方法(indeOf,substring,replaceAll等)?
---------------------------------
关于这类题目,有些浮躁的程序员很是不屑,觉得既然java提供了(indeOf,substring,replaceAll等),为什么不能用呢,这不是刻意为难人嘛。其实这类人完全想错了,像这类的需求(笔试需求),就不应该用基于String对象的方法,就应该将“字符串”转化为“字符数组”来运算,因为算法还是基于基本类型+数组才是最快的。大家如果感兴趣可以看一下Collections.sort(XX),不管你传什么类型的集合的XX给它,它都会转化为数组来运算。既然是考算法,那么请你抓住关键点,转化为基本类型+数组来运算吧。

所以,有人已经给出了答案的关键
char[] originalCharArray= "6sabcsssfsfs33".toCharArray();

如果我的理解不当,欢迎斧正。
1 请登录后投票
   发表时间:2009-11-30  
linyvlu 写道
		StringBuilder sb = new StringBuilder("6sabcsssfsfs33");
		sb.delete(2, 4);
		sb.delete(sb.length()-2, sb.length());

此人为牛人也,佩服。
0 请登录后投票
   发表时间:2009-11-30  
pan_java 写道
8、描术算法,如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。内存只有1G???
9、在1亿条用户记录里,如何快速查询统计出看了5个电影以上的用户?

怎么处理????


是啊,俺也想知道,高手们讨论下这些性能问题吧:)
0 请登录后投票
   发表时间:2009-11-30  
congdepeng 写道
2)假如有字符串“6sabcsssfsfs33” ,用最(有)快速的方法去掉字符“a”,“b”,“3”(字符串“ab3”),不能用java内置字符串方法(indeOf,substring,replaceAll等)?
---------------------------------
关于这类题目,有些浮躁的程序员很是不屑,觉得既然java提供了(indeOf,substring,replaceAll等),为什么不能用呢,这不是刻意为难人嘛。其实这类人完全想错了,像这类的需求(笔试需求),就不应该用基于String对象的方法,就应该将“字符串”转化为“字符数组”来运算,因为算法还是基于基本类型+数组才是最快的。大家如果感兴趣可以看一下Collections.sort(XX),不管你传什么类型的集合的XX给它,它都会转化为数组来运算。既然是考算法,那么请你抓住关键点,转化为基本类型+数组来运算吧。

所以,有人已经给出了答案的关键
char[] originalCharArray= "6sabcsssfsfs33".toCharArray();

如果我的理解不当,欢迎斧正。


根本就是这种题无聊...
不用java内置字符串方法,toCharArray()难道不是java内置字符串方法?
那只能自己按照JDK源码toCharArray()方法的形式写一个转换方法,用System.arraycopy了

这个还好,更有不让使用java提供的方法的...我真怀疑是那些出题的对着抄,结果把题目抄错了的
苍天啊,不用java提供的方法,怎么把字符串转换成字符数组,以后还怎么进行啊
难不成再像System.arraycopy那样写个native方法不成?
0 请登录后投票
   发表时间:2009-11-30  
aniu2008 写道
pan_java 写道
8、描术算法,如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。内存只有1G???
9、在1亿条用户记录里,如何快速查询统计出看了5个电影以上的用户?

怎么处理????


是啊,俺也想知道,高手们讨论下这些性能问题吧:)

期待大牛解答!!
0 请登录后投票
   发表时间:2009-11-30  
ruvuoai 写道
aniu2008 写道
pan_java 写道
8、描术算法,如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。内存只有1G???
9、在1亿条用户记录里,如何快速查询统计出看了5个电影以上的用户?

怎么处理????


是啊,俺也想知道,高手们讨论下这些性能问题吧:)

期待大牛解答!!

同样期待,为这些性能题郁闷很久了~!~
0 请登录后投票
   发表时间:2009-11-30  
还是第一次听说这个叫做KMP的算法,孤陋寡闻了。查了半天资料看的云里雾里的
,写资料的都喜欢整术语,生怕别人看懂。干脆不看了,自己去写。那位给拍拍砖
package com.saturday;

public class KMP {
	public static String myReplaceAll(
			String input,
			String replaced){
		
		//短路掉不可能匹配的情况
		if(replaced.equals("")
		 ||input.length()<replaced.length()){
			return input;
		}
		
		StringBuffer buf=new StringBuffer();
		char[] s=input.toCharArray();
		char[] r=replaced.toCharArray();		     
		
		int rLen=r.length;
		int matchCount;	
		
		for(int i=0,sLen=s.length;i<sLen;){			
			if(i<sLen-rLen){
				//检查匹配
				matchCount=0;				
				for(int j=0;j<rLen;j++){
					if(s[i+j]==r[j]){
						matchCount++;						
					}else{
						break;
					}
				}		
				//完全匹配
				if(matchCount==rLen){
					i+=rLen;
					continue;
				}				
				//部分匹配
				if(matchCount>0){
					for(int j=0;j<matchCount;j++){
						buf.append(s[i++]);
					}
					continue;
				}
			}			
			
			buf.append(s[i++]);
		}		
		
		return buf.toString();
	}
	
	
	public static void main(String[] args){
		String input="123 mfc mf fc mfdC mfmfc cmfc dd abc";
		String replaced="1234";
		
		System.out.println(
			myReplaceAll(input,replaced).equals(input.replaceAll(replaced,""))
		);
	}
}

0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics