有一数组 a[1000]存放了1000 个数,这 1000 个数取自1-999, 且只有两个相同的数,剩下的 998个数不同, 写一个搜索算法找出相同的那个数的

zhaobolongge 2014-08-21 02:51:31
有一数组 a[1000]存放了1000 个数,这 1000 个数取自1-999, 且只有两个相同的数,剩下的 998个数不同, 写一个搜索算法找出相同的那个数的值(请用 C# or JAVA 编程实现,注意空间效率和时间效率尽可能优化)。
解答:
import java.util.Arrays;
public class SearchDemo {
/** 被搜索数据的大小 */
private static final int size = 1000;
public static void main(String[] args) {
int[] data = new int[size];
// 添加测试数据
for (int k = 0; k < data.length; k++) {
data[k] = k + 1;
}
data[999] = 567;
result(data);
}
/**
* 调用分搜索算法的方法实现查找相同元素
* @param data
*/
public static void result(int data[]){
Arrays.sort(data);
for (int i = 0; i < data.length; i++) {
int target = data[i];
data[i] = 0;//这里为什么要把data[i] = 0赋值为0啊???!!!
int result = binaryFind(data, target);
if (result != -1) {
System.out.println("相同元素为:"+data[result]);
break;
}
}
}
/**
* 二分搜索算法实现
*
* @param data
* 数据集合
* @param target
* 搜索的数据
* @return 返回找到的数据的位置,返回-1 表示没有找到。
*/
public static int binaryFind(int[] data, int target) {
int start = 0;
int end = data.length - 1;
while (start <= end) {
int middleIndex = (start + end) / 2;
if (target == data[middleIndex]) {
return middleIndex;
}
if (target >= data[middleIndex]) {
start = middleIndex + 1;
} else {
end = middleIndex - 1;
}
}
return -1;
}
}
...全文
1325 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shixitong 2014-08-21
  • 打赏
  • 举报
回复
data[i] = 0;// 这里为什么要把data[i] = 0赋值为0啊???!!! 把当前匹配的数,重匹配的数组中去除掉 比如你当前找1在数组中有没有重复的,如果你不把1的值设置0,那么匹配到相同的数字就是1
  • 打赏
  • 举报
回复
可以先冒泡,然后取相等么
wwzhzh 2014-08-21
  • 打赏
  • 举报
回复
没看懂?是想说(sum(data)-499500)么?
zhaobolongge 2014-08-21
  • 打赏
  • 举报
回复
我已经知道了,找相同的值。
sunbo624 2014-08-21
  • 打赏
  • 举报
回复
个人觉得先排序 然后找 a[i] != i + 1 的那个

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧