Java算法分析1—————寻找数组相同元素
来源:互联网 发布:赛车网络手游 编辑:程序博客网 时间:2024/06/04 19:40
算法的两个评测指标:运行时间和内存消耗
要么用时间换空间,要么用空间换时间
寻找数组相同元素测试一:
0~99共100个元素各不相同,新加入一个0~99的元素不明确位置
从101个元素数组中找出与0~99元素中重复的一个
/* 找相同元素 * 0~99共100个元素各不相同 * 从101个元素数组中找出与0~99元素中重复的一个 */public class Dome01 {public static void main(String[] args) {int arr[] = new int[101];for (int i = 0; i < 100; i++) {arr[i] = i;}arr[100] = 38; // 假定重复元素为38// 将数组元素打乱 Math.random() 取值范围是[0,1)// 如何打乱数据??for (int j = 0; j < 1000; j++) { // 进行1000次数据打乱的操作int num1 = (int) (Math.random() * 101); // num取值范围是[0,101)int num2 = (int) (Math.random() * 101);int temp = arr[num1];arr[num1] = arr[num2];arr[num2] = temp;}// 算法一:用双循环实现Jonney: for (int i = 0; i < arr.length; i++) {// 将数组元素依次与后面的数组元素比较for (int j = i + 1; j < arr.length; j++) {if (arr[i] == arr[j]) {System.out.println("重复元素是:" + arr[i]);break Jonney; // 退出双循环}}}// 算法一效率太低// 算法二:将数组的元素全部累加起来就是0~99的数据+相同元素 再减去0~99的和int sum = 0;for (int i = 0; i < arr.length; i++) {sum += arr[i];}for (int j = 0; j < 100; j++) {sum -= j;}System.out.println("重复元素是:" + sum);// 算法二如果计算的数据太多就会有数据溢出// 算法三:使用异或解决// 0^1^2^3^4^...^m...^99^m^0^1^2^3^4^...^m...^99=m// 使用数组的第一个元素异或后面的所有元素for (int i = 1; i < arr.length; i++) {arr[0] = arr[0] ^ arr[i];}// 再次将arr[0]保存的结果与0~99异或一次for (int i = 0; i < 100; i++) {arr[0] = arr[0] ^ i;}System.out.println("重复元素是:" + arr[0]);// 算法三才是最佳算法}}
寻找数组相同元素测试二:
0~99共100个整数,各不相同,将所有数放入一个数组,随机排布
数组长度100,将其中任意一个数替换成0~99另一个数(唯一重复的数字)
将重复的数字找出
/* * 0~99共100个整数,各不相同,将所有数放入一个数组,随机排布 * 数组长度100,将其中任意一个数替换成0~99另一个数(唯一重复的数字) * 将重复的数字找出 */public class Dome2 {public static void main(String[] args) {int arr[] = new int[100];for (int i = 0; i < arr.length; i++) {arr[i] = i;}// 随机排布for (int i = 0; i < 1000; i++) {int num1 = (int) (Math.random() * 100);int num2 = (int) (Math.random() * 100);int temp = arr[num1];arr[num1] = arr[num2];arr[num2] = temp;}// 用某个值给某个值替换int num1 = (int) (Math.random() * 100);int num2 = (int) (Math.random() * 100);// 保证num1与num2不同while (num1 == num2) {num1 = (int) (Math.random() * 100);}System.out.println("将" + num1 + "位置的值用" + num2 + "的位置替换");arr[num1] = arr[num2];for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + "\t");}// 算法实现:// 算法一:用双循环实现Jonney: for (int i = 0; i < arr.length; i++) {// 将数组元素依次与后面的数组元素比较for (int j = i + 1; j < arr.length; j++) {if (arr[i] == arr[j]) {System.out.println("重复元素是:" + arr[i]);break Jonney; // 退出双循环}}}// 算法一效率太低// 算法二:用数组优化的算法// 定义一个新数组 int newArr[]=new int[100] 默认值为0// 把原始数组的元素作为新数组的下标,如果该下标对应的新数组元素存在,就将该元素值+1=1/* * 原始数组 8 3 7 2 1 5 6 8 0 * 新数组 0 0 0 0 0 0 0 0 0 * 对新数组+1 1 1 1 1 0 1 1 1 2 */// 新数组中元素为2的值的下标就是重复元素int newArr[] = new int[100];for (int i = 0; i < arr.length; i++) {newArr[arr[i]]++; // 将原始元素对于新数组的索引下标if (newArr[arr[i]] == 2) {System.out.println("重复元素是:" + arr[i]);}}}}
1 0
- Java算法分析1—————寻找数组相同元素
- Java笔记——两数组取相同元素
- 学习算法(2)——查找数组中的相同元素
- 学习算法(3)——查找2个数组中的相同元素
- (lodash_gcy)unique—移除数组中的相同元素
- 在逆转数组中寻找最小元素——Java实现
- Java对数组的操作(三)—比较两个数组中的元素是否相同的最简单方法
- java基础算法——交错合并数组元素
- Java—数组添加元素
- 面试题——找出数组中不相同的所有元素(是数组,不是集合)
- Java基本方法——String数组转List,删除List1中与List2中相同的元素
- 算法——寻找两个有序数组的中值
- 2016蓝桥杯算法训练——寻找数组中的最大值
- 寻找数组中最大值和最小值—分治算法
- oj2204——使链表中不存在相同元素
- 【算法分析】寻找多数元素
- js简单算法——寻找文档中所有元素节点
- java数组清除相同元素
- linux下的dhcp服务的完全配置(图文详解)
- DOM
- Membership Role Profile设置配置文件
- VS2008SP1无法安装
- iOS判断邮箱,手机号,车牌号,车型,用户名,密码,昵称,身份证号,是否有效
- Java算法分析1—————寻找数组相同元素
- Android 实现应用程序最小化到后台运行
- 数据结构复习(重写某些重要数据结构API) ------------队列
- [java]在eclipse中如何输入命令行参数(主函数中的参数)
- android中Baseadapter的 getItem 和 getItemId 的作用和重写
- 浅谈TCP/IP网络编程中socket的行为
- 有关页面显示pdf心得
- Java中volatile的作用以及用法 GOOD
- 单链表操作,队列,栈实现,以及常见字符串库函数经典实现