有关JAVA二分法的算法 给出两个数组,用二分法算出两个数组的交集,大家帮忙想想怎么写这个代码。谢谢各位 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这两个数组都是INT类型的数组,大家帮忙想想怎么写,我不大会写楼上的帮忙给写出来吧,在这里不胜感激 package com.book.java2;import java.util.ArrayList;import java.util.List;public class Intersection { /** * @param a * @param b * 递增有序数组 * @return a和b数组的交集 */ public List<String> getIntersection(String[] a, String[] b) { List<String> list = new ArrayList<String>(); if (a.length == 0 || b.length == 0) { return null; } for (String str : a) { int low = 0; int high = b.length - 1; while (low <= high) { int mid = (low + high) / 2; if (str.compareTo(b[mid]) < 0) { high = mid - 1; } else if (str.compareTo(b[mid]) > 0) { low = mid + 1; } else { list.add(str); break; } } } return list; }} import java.util.*;public class Intersection{ public static void main(String[] args){ int[] a={2,3,7,10,15,20,25,26}; //假设a,b数组都已经排好序了,如果没有排序,可以用Arrays.sort()方法对其排序. int[] b={2,3,5,7,8,20,26}; int[] c=new int[a.length]; int count=0; for(int i=0;i<b.length;i++){ if(binarySearch(a,b[i])>=0){ c[count++]=b[i]; } } System.out.println("a数组:"+Arrays.toString(a)); System.out.println("b数组:"+Arrays.toString(b)); System.out.print("交集:["); for(int i=0;i<count;i++){ System.out.print(c[i]+", "); } System.out.println("]"); } static int binarySearch(int[] array,int elem){ //二分法查找elem在array数组中的位置,找不到返回-1 int left=0,right=array.length-1,mid; while(left<=right){ mid=(left+right)/2; if(elem>array[mid]){ left=mid+1; }else if(elem<array[mid]){ right=mid-1; }else{ return mid; } } return -1; } main方法最后的那条语句,改为下面的语句,可以退两格打印出']',这样就可以把输出交集后最后的逗号去掉了.System.out.println("\b\b]"); package com.example.thread;import java.util.Arrays;public class t { public static void main(String[] args){ int[] a={80,45,7,10,20,15,25,26}; //假设a,b数组都已经排好序了,如果没有排序,可以用Arrays.sort()方法对其排序. int[] b={2,26,5,7,45,20,26}; Arrays.sort(a); Arrays.sort(b); int[] c=new int[a.length]; int count=0; for(int i=0;i<b.length;i++){ if(binarySearch(a,b[i])>=0){ c[count++]=b[i]; } } System.out.println("a数组:"+Arrays.toString(a)); //System.out.println("a数组:"+Arrays.sort(a)); System.out.println("b数组:"+Arrays.toString(b)); System.out.print("交集:["); for(int i=0;i<count;i++){ System.out.print(c[i]+", "); } System.out.println("\b\b]"); } static int binarySearch(int[] array,int elem){ //二分法查找elem在array数组中的位置,找不到返回-1 int left=0,right=array.length-1,mid; while(left<=right){ mid=(left+right)/2; if(elem>array[mid]){ left=mid+1; }else if(elem<array[mid]){ right=mid-1; }else{ return mid; } } return -1; }} 某游戏规则中,甲乙双方每个回合的战斗总是有一方胜利,一方失败。 为什么在Panel画的图没法显示? java一道存款题 LoginServlet 编译 字体无法显示的问题?(jbuilder可以,jar运行就不行) 大家进来帮帮我。。一个新人的问题。麻烦大家了 简单问题! 哪里可以下载MsSqlserver2000的JDBC程序包,谢谢!谢谢!一定给分。 为什么从IBM网站上down了vaj4后,为什么安装不了?说什么语言不对?各位怎么办? 兄弟们,我已经有一个月没干活了,闲的发慌啊! dom4j读取xml文件乱码问题 JDK6中的List<E>类在继承中怎么用?
package com.book.java2;import java.util.ArrayList;
import java.util.List;public class Intersection { /**
* @param a
* @param b
* 递增有序数组
* @return a和b数组的交集
*/
public List<String> getIntersection(String[] a, String[] b) {
List<String> list = new ArrayList<String>(); if (a.length == 0 || b.length == 0) {
return null;
} for (String str : a) {
int low = 0;
int high = b.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (str.compareTo(b[mid]) < 0) {
high = mid - 1;
} else if (str.compareTo(b[mid]) > 0) {
low = mid + 1;
} else {
list.add(str);
break;
}
}
} return list;
}
}
public class Intersection{
public static void main(String[] args){
int[] a={2,3,7,10,15,20,25,26}; //假设a,b数组都已经排好序了,如果没有排序,可以用Arrays.sort()方法对其排序.
int[] b={2,3,5,7,8,20,26};
int[] c=new int[a.length];
int count=0;
for(int i=0;i<b.length;i++){
if(binarySearch(a,b[i])>=0){
c[count++]=b[i];
}
}
System.out.println("a数组:"+Arrays.toString(a));
System.out.println("b数组:"+Arrays.toString(b));
System.out.print("交集:[");
for(int i=0;i<count;i++){
System.out.print(c[i]+", ");
}
System.out.println("]");
}
static int binarySearch(int[] array,int elem){ //二分法查找elem在array数组中的位置,找不到返回-1
int left=0,right=array.length-1,mid;
while(left<=right){
mid=(left+right)/2;
if(elem>array[mid]){
left=mid+1;
}else if(elem<array[mid]){
right=mid-1;
}else{
return mid;
}
}
return -1;
}
System.out.println("\b\b]");
int[] a={80,45,7,10,20,15,25,26}; //假设a,b数组都已经排好序了,如果没有排序,可以用Arrays.sort()方法对其排序.
int[] b={2,26,5,7,45,20,26};
Arrays.sort(a);
Arrays.sort(b);
int[] c=new int[a.length];
int count=0;
for(int i=0;i<b.length;i++){
if(binarySearch(a,b[i])>=0){
c[count++]=b[i];
}
}
System.out.println("a数组:"+Arrays.toString(a));
//System.out.println("a数组:"+Arrays.sort(a));
System.out.println("b数组:"+Arrays.toString(b));
System.out.print("交集:[");
for(int i=0;i<count;i++){
System.out.print(c[i]+", ");
}
System.out.println("\b\b]");
}
static int binarySearch(int[] array,int elem){ //二分法查找elem在array数组中的位置,找不到返回-1
int left=0,right=array.length-1,mid;
while(left<=right){
mid=(left+right)/2;
if(elem>array[mid]){
left=mid+1;
}else if(elem<array[mid]){
right=mid-1;
}else{
return mid;
}
}
return -1;
}
}