IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> java解决全排序问题 -> 正文阅读

[数据结构与算法]java解决全排序问题

  1. 说明:
    • 这里的用例是数字数组。
    • 全排序样式如; 数组[ 1,1,3]
      他的全排序为:[1,1,3] , [1,3,1] ,[3,1,1]
  2. 对于全排序最简单的做法就是通过循环迭代去实现,思想是:

将所有的不同下标的数字都视为不一样的个体。然后用循环,每一个作为一次第一个元素,然后去排序其他的个体。在最里面的循环体中编成一个新的数组,并加入我们的设置的全局变量二维数组中存储起来,最后去重皆可。

如果我们数组长为n,那么需要最大的时间为; n的n次方,最小为 n!
很显然这样做需要使用到大量的嵌套循环去实现,代码量大,而且耗时长。

  1. 这里介绍一种递归的方法
    他计算使用到的时间为:n的平方
	public List<List<Integer>> sort(int[] num){
		//这里实例化一个二维数组存储最终数据,将temp添加进来
		List<List<Integer>> res = new ArrayList<>();
		//这里实例化一个一维数组保存排序好的num
		List<Integer> temp = new ArrayList<>();
		
		helder(num,res, temp, 0);
		return res;
	}
	public void helder(int[] num,List<List<Integer>> res,List<Integer> temp,int index) {
		//如果index>=num.lenght的时候就将temp加入到二维列表中
		if(index >= num.length) {
			res.add(temp);
		}
		//HashSet实现了Set接口,add一个元素时,先获取元素的哈希值,达到去重的效果
		Set<Integer> set = new HashSet<Integer>();
		for(int i = index; i < num.length; i++) {
			//如果set已经包含了num[i]那么就之间跳过
			if(set.contains(num[i])) {
				continue;
			}
			//如果不重复那么更新temp的值和set的值
			set.add(num[i]);
			temp.add(num[i]);
			//添加完毕之后我们给num的第i个和第index个数据交换位置,更新num
			wrap(num, index, i);
			helder(num, res, temp, index+1);
			//做完一次排序将temp的第index个数字移除进行下一个排序
			temp.remove(index);
			wrap(num, index, i);
			
		}
	}
	public void wrap(int[] num,int i ,int j) {
		int x = num[i];
		num[i] = num[j];
		num[j] = x;
	}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-20 12:44:30  更:2021-10-20 12:45:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:38:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码