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;
}
}