本题为百度质量部面试题
2n个数,一半奇数,一半偶数,设计一个程序让奇数位上的数是奇数,偶数位上的是偶数,并计算程序的空间复杂度和时间复杂度
程序思想:
本题类似于调整数组使奇数位于数组前半部分,偶数位于数组后半部分。
设两个指针,一个初始化为ou=0,另一个初始化为ji=1,如果arr[ou]为偶数,ou+=2;如果arr[ji]为奇数,ji+=2;
如果ou<len && ji<len ,再判断如果偶数为为奇数并且奇数位为偶数,则交换元素。
public class jiou { public static void main(String[] args) { int[] arr = { 0, 1, 3, 2, 2, 4, 4, 5, 5,7 }; reorder(arr); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + ","); } } public static void reorder(int[] arr) { if (arr == null) { System.out.println("the array is null"); return; } int len = arr.length; int ou = 0; int ji = 1; while (ou < len && ji < len) { if (arr[ou] % 2 == 0) { ou = ou + 2; } if (arr[ji] % 2 == 1) { ji = ji + 2; } if (ou < len && ji < len) {//该条件的目的是先判断数组下标是否出界,如果不加该条件判断,程序可能会有数组下标越界错误 if (arr[ou] % 2 == 1 && arr[ji] % 2 == 0) { int temp = arr[ou]; arr[ou] = arr[ji]; arr[ji] = temp; } } } } }
程序结果
0,1,2,3,2,5,4,5,4,7,
很多应用都会涉及到email,但自己架设email服务器的情况还是很少的。一般都是直接借用一些门户网站的邮件服务发邮件。
实现方式一般有如下3种方案:原始级别—自己直接写socket,处理通讯协议; 简单级别—自行封装mail.jar的API; 开源封装级别—引入一些开源框架的封装,功能强大,却又简单易用。
下面粗略介绍一下以上三种方式的实现情况。
1. 原始级别
邮件格式 + SMTP协议 + 自己写socket
由于直接处理协议层面的数据,需要开发者熟悉协议(否则,起码也需要边开发,边对着rfc文档),以及面对一堆的数据封装,异常处理等细节。
其实好处也在于此。所有的细节都是对开发者开放的,你觉得有多好就多好。
SMTP协议:参考rfc5321
邮件格式:参考rfc2882
Socket代码
Socket client = new Socket (SMTPServerAddress, SMTPPort);
// …. Socket read/ write 参考协议格式,处理通讯数据
2. 简单级别
引入mail.jar包
Mail.java 包对通讯协议做了封装,但在具体应用层面,还是有不少邮件的细节需要用户处理。
实现例子:
//服务器信息
Properties props = new Properties();
props.put("mail.smtp.host", _hostName);
props.put("mail.smtp.auth", _needAuth.toString());
//验证
Authenticator authenticator = null;
if(_needAuth){
authenticator = new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
returnnew PasswordAuthentication(_authUser, _authPwd);
}
};
}
//处理邮件信息
Session session = Session.getInstance(props, authenticator);
Message msg = new MimeMessage(session);
if (isNeedNotification()) {
msg.setHeader("Disposition-Notification-To", "1");
}
msg.setSentDate(new Date());
if(_subject!=null){
msg.setSubject( MimeUtility.encodeText(_subject, getEncoding(),"B"));
}
String authEmail = getAuthEmail(getAuthUser(), getHostName());
msg.setFrom(new InternetAddress(authEmail, getPersonalName(), getEncoding()));
msg.setRecipients(Message.RecipientType.TO, getInternetAddress(_toList));
if(_ccList!=null){
msg.setRecipients(Message.RecipientType.CC, getInternetAd
最近一直维护一个项目,项目涉及到flex的内容,今天往fb导入flex项目的时候提示“未安装asp.net development server”。新手有点晕,只能上网找找答案!
功夫不负有心人,问题的原因是:我系统是64位的,在64位系统下.netFrameWork的Development server安装位置与fb调用的development server的默认位置不同引起的。
解决问题的方法如下:
找到路径:c:\Program Files(X86)\Common Files\microsoft shared\DevServer\10.0,并复制该路径下的WebDev.WebServer20.exe和WebDev.WebServer20.exe.config两个文件到c:\Windows\Microsoft.NET\Framework\v2.0.50727文件夹下并将文件名中的20去掉。
导入项目正常...
end