您的位置:首页 > 职场人生

程序员面试金典:另类加法、单词最近距离

2017-07-21 07:44 239 查看

1.另类加法

题目描述

请编写一个函数,将两个数字相加。不得使用+或其他算数运算符。

给定两个int A和B。请返回A+B的值
测试样例:
1,2

返回:3


import java.util.*;

public class UnusualAdd {
public int addAB(int A, int B) {
//算法2用递归实现牛客网看到的
if(A==0)	return B;
else if(B==0)	return A;
else{
return addAB(A^B,(A&B)<<1);
}
}
}

2.单词最近距离

方法1:记录每次索引,输出min

每次记录两个单词的索引,更新索引的最小值,当文章遍历完成后最后输出min

import java.util.*;

public class Distance {
public int getDistance(String[] article, int n, String x, String y) {
int flagx=-1,flagy=-1;
int min=Integer.MAX_VALUE;
for(int i=0;i<article.length;i++){
if(article[i].equals(x)){
flagx=i;
}

if(article[i].equals(y)){
flagy=i;
}
if(flagx!=-1&&flagy!=-1){
min=getMin(min,Math.abs(flagx-flagy));
}
}
return min;
}

public int getMin(int a,int b){
return a<b? a:b;
}
}

方法2:利用两个动态数组来记录索引值

import java.util.*;

public class Distance {
public int getDistance(String[] article, int n, String x, String y) {
int min=Integer.MAX_VALUE;
ArrayList<Integer> listx=new ArrayList<Integer>();
ArrayList<Integer> listy=new ArrayList<Integer>();
for(int i=0;i<n;i++){
if(article[i].equals(x))
listx.add(i);
else if(article[i].equals(y)){
listy.add(i);
}
}
for(int i=0;i<listx.size();i++){
for(int j=0;j<listy.size();j++){
min=getMin(min,Math.abs(listx.get(i)-listy.get(j)));
}
}
return min;
}

public int getMin(int a,int b){
return a>b? b:a;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息