一般做网站的在哪里找/网站seo基础优化

一般做网站的在哪里找,网站seo基础优化,专做写字楼出租的网站,转转网站怎么建设46. 全排列 - 力扣(LeetCode) 法1:暴力枚举 总共n!种全排列,一一列举出来放入list就行,关键是怎么去枚举呢?那就每次随机取一个,然后删去这个,再从剩下的数组中继续去随机选一个&a…

46. 全排列 - 力扣(LeetCode)

法1:暴力枚举

总共n!种全排列,一一列举出来放入list就行,关键是怎么去枚举呢?那就每次随机取一个,然后删去这个,再从剩下的数组中继续去随机选一个,依次类推直到为数组为0。

为了快,选择set,每选了一个,set里就删除一个,再继续从里面随机选。

Tip:int[]转换为set,利用stream流替代传统for循环

class Solution {List<List<Integer>> ans = null;public List<List<Integer>> permute(int[] nums) {ans = new ArrayList<List<Integer>>();//记录还未抽中的数组元素,技巧:用stream流代替传统循环Set<Integer> set = new HashSet<>(Arrays.stream(nums).boxed().toList());int n = nums.length;bruteForce(set, n, new ArrayList<>(n));return ans;}//n表示set还剩几个元素没抽,list表示这次随机抽取的全排列public void bruteForce(Set<Integer> set, int n, List<Integer> list) {//反正就剩最后一个了,不用随机抽了//不用0,是为了减少一次拷贝if(n == 1) {for(int num:set)list.add(num);ans.add(list);return;}for(int num:set) {//需要拷贝构造新的list和setList<Integer> newList = new ArrayList<>(list);newList.add(num);Set<Integer> newSet = new HashSet<>(set);newSet.remove(num);bruteForce(newSet, n - 1, newList);}}
}

本来枚举共n!个,bruteForce()方法本身只调用了n!(1*n*n-1*...*2)次,但因为每次要拷贝新的list和set(list和set加起来共n个元素),所以每次调用bruteForce前拷贝都需要O(n),所以算上拷贝时间复杂度公式应该为

T(n) = n*( n + T(n-1))

具体为多少,GPT说为O(n⋅n!)我不知道对不对...不会算...

很明显这样暴力枚举的话,中间变量,list和set很多,拷贝也花时间。所以才有了回溯算法进行优化。

法2:回溯

可以不拷贝list,而是先添加,遍历完这次排列后,再删除回溯复原,再开始下一个,这就是所谓的回溯吧。

注意每次最后要添加list的拷贝。不过new ArrayList<>(originArr)是浅拷贝,里面的每个属性仍指向同一个对象,不过这里无所谓,不需要深拷贝,本身Integer包装类也是不可变对象。

class Solution {List<List<Integer>> ans = null;public List<List<Integer>> permute(int[] nums) {ans = new ArrayList<List<Integer>>();//记录还未抽中的数组元素,技巧:用stream流代替传统循环Set<Integer> set = new HashSet<>(Arrays.stream(nums).boxed().toList());int n = nums.length;bruteForce(set, n, new ArrayList<>(n));return ans;}//n表示set还剩几个元素没抽,list表示这次随机抽取的全排列public void bruteForce(Set<Integer> set, int n, List<Integer> list) {//没了if(n == 0) {//这里添加的应是新的拷贝,不然所有添加的都是同一个list了ans.add(new ArrayList<Integer>(list));return;}Set<Integer> tmpSet = new HashSet<>(set);for(int num:tmpSet) {list.add(num);set.remove(num);bruteForce(set, n - 1, list);//然后回溯list.remove(list.size()-1);set.add(num);}}
}

但我这种还是得拷贝set来方便后面继续抽未选中过的。不够优化。

官解十分巧妙利用了list的未排列部分来作set,这样可以每次选择list的未排列部分作为下一个排列的 来替代 从set中选择下一个排列的,然后通过回溯复原。

class Solution {List<List<Integer>> ans = null;public List<List<Integer>> permute(int[] nums) {ans = new ArrayList<List<Integer>>();//stream流代替传统for循环List<Integer> list = new ArrayList<>(Arrays.stream(nums).boxed().toList());int n = nums.length;backTrack(list, n, 0);return ans;}//n表示总共多少个元素,arrangedN表示已经排好多少个了,同时也表示list下一个应该排的下标public void backTrack(List<Integer> list, int n, int arrangedN) {//没了if(arrangedN == n) {//这里添加的应是新的拷贝,不然所有添加的都是同一个list了ans.add(new ArrayList<Integer>(list));return;}for(int i = arrangedN; i<n;i++) {Collections.swap(list, arrangedN, i);backTrack(list, n, arrangedN+1);//回溯复原Collections.swap(list, arrangedN, i);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/63965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot教程之二十五: 使用 Tomcat 部署项目

Spring Boot – 使用 Tomcat 部署项目 Spring Boot 是一个基于微服务的框架&#xff0c;在其中创建可用于生产的应用程序只需很少的时间。Spring Boot 建立在 Spring 之上&#xff0c;包含 Spring 的所有功能。如今&#xff0c;它正成为开发人员的最爱&#xff0c;因为它是一个…

【C语言篇】C 语言总复习(下):点亮编程思维,穿越代码的浩瀚星河

我的个人主页 我的专栏&#xff1a;C语言&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞❤ 收藏❤ 在C语言的世界里&#xff0c;结构体和联合体以及文件操作都是非常重要且实用的知识板块&#xff0c;掌握它们能帮助我们更高效地组织数据以及与外部文…

CNCF云原生生态版图-项目和产品综合分析

CNCF云原生生态版图-项目和产品综合分析 CNCF云原生生态版图-项目和产品综合分析整体统计分析中国研发人员贡献项目和产品其中&#xff0c;纳入 CNCF 管理的开源项目 链接 CNCF云原生生态版图-项目和产品综合分析 整体统计分析 在对云原生技术选型时&#xff0c;优先选择经过 …

VScode、Windsurf、Cursor 中 R 语言相关快捷键设置

前言 在生物信息学数据分析中&#xff0c;R语言是一个不可或缺的工具。为了提高R语言编程效率&#xff0c;合理设置快捷键显得尤为重要。本文介绍在VSCode Windsurf Cursor 中一些实用的R语言快捷键设置&#xff0c;让非 Rstudio 的 IDE 用起来得心应手&#x1f611; 操作种…

分布式任务调度平台xxl-job源码学习

XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 官网&#xff1a;https://www.xuxueli.com/xxl-job/ github&#xff1a;https://github.com/xuxueli/xxl-…

Macbookpro M1 IDEA中安装mysql

一&#xff1a;安装与连接数据库 1. 首先在mysql中创建一个初始数据库&#xff1a;idea_db&#xff0c;如示&#xff1a; 2.打开IDEA,如果最右侧没有database窗口&#xff0c;则在插件那里下载“Database navigator”,稍后重启一下即可&#xff1b; 点击最右侧Database---->…

Linux内核结构及源码概述

参考&#xff1a;深入分析LINUX内核源码 深入分析Linux内核源码 (kerneltravel.net) Linux 是一个庞大、高效而复杂的操作系统&#xff0c;虽然它的开发起始于 Linus Torvalds 一个人&#xff0c;但随着时间的推移&#xff0c;越来越多的人加入了 Linux 的开发和对它的不断完善…

[Unity] Text文本首行缩进两个字符

Text文本首行缩进两个字符的方法比较简单。通过代码把"\u3000\u3000"加到文本字符串前面即可。 比如&#xff1a; 效果&#xff1a; 代码&#xff1a; TMPtext1.text "\u3000\u3000" "选择动作类型&#xff1a;";

容器内部时间和Node时间不同步问题

之前在《 Docker及Kubernetes使用过程中出现的问题&#xff08;FAQ&#xff09;》中的“FAQ30 容器内部时间和Node时间不同”分享过容器内部和容器服务器之间时间不一致的问题&#xff1b;这通常会导致各种问题&#xff0c;比如日志记录、定时任务等。 问题原因&#xff1a;问…

AI开源南京分享会回顾录

AI 开源南京分享会&#xff0c;已于2024年11月30日下午在国浩律师&#xff08;南京&#xff09;事务所5楼会议厅成功举办。此次活动由 KCC南京、PowerData、RISC-Verse 联合主办&#xff0c;国浩律师&#xff08;南京&#xff09;事务所协办。 活动以“开源视角的 AI 对话”为主…

OpenCV 图像变换与处理实战

OpenCV快速通关 第一章&#xff1a;OpenCV 简介与环境搭建 第二章&#xff1a;OpenCV 图像基本操作 第三章&#xff1a;OpenCV 图像变换与处理实战 OpenCV 图像变换与处理实战 OpenCV快速通关OpenCV 图像变换与处理实战一、OpenCV 基础与图像处理概览二、图像变换理论精析三、…

Ubuntu22.04安装docker desktop遇到的bug

1. 确认已启用 KVM 虚拟化 如果加载了模块&#xff0c;输出应该如下图。说明 Intel CPU 的 KVM 模块已开启。 否则在VMware开启宿主机虚拟化功能&#xff1a; 2. 下一步操作&#xff1a; Ubuntu | Docker Docs 3. 启动Docker桌面后发现账户登陆不上去&#xff1a; Sign in | …

【深度学习入门】深度学习介绍

1.1 深度学习介绍 学习目标 目标 知道深度学习与机器学习的区别了解神经网络的结构组成知道深度学习效果特点 应用 无 区别 特征提取方面 机器学习的特征工程步骤是要靠手动完成的&#xff0c;而且需要大量领域专业知识深度学习通常由多个层组成&#xff0c;它们通常将更简…

实现按键按下(低电平)检测到下降沿

按照流程进行编程 步骤1&#xff1a; 初始化函数 包括时基工作参数配置 输入通道配置 更新中断使能 使能捕获、捕获中断及计数器 HAL_TIM_IC_Init(&ic_handle) //时基参数配置 HAL_TIM_IC_ConfigChannel(&ic_handle,&ic_config,TIM_CHANNEL_2) //输…

汽车车牌标记支持YOLO,COCO,VOC三种格式标记,4000张图片的数据集

本数据集支持YOLO&#xff0c;COCO&#xff0c;VOC三种格式标记汽车车牌&#xff0c;无论是新能源汽车还是油车都能识别标记&#xff0c;该数据集一共包含4000张图片 数据集分割 4000总图像数 训练组 70&#xff05; 2800图片 有效集 20&#xff05; 800图片 测…

游秦岭山感

巍乎高哉&#xff01; 悠悠大秦岭 佑吾华夏之根脉 八水润之 泽万物而赋予生机 于万山之山中 享自然之美于万物 西有昆仑祖龙脉 东有秦岭护关中 绿水青山国之本 万山长青谋发展 旭日东升耀中华 固我山河永泰安 你我同行共保护 关中龙脉更兴旺

阿里云-通义灵码:测试与实例展示

目录 一.引子 二.例子 三.优点 四.其他优点 五.总结 一.引子 在软件开发的广袤天地中&#xff0c;阿里云通义灵码宛如一座蕴藏无尽智慧的宝库&#xff0c;等待着开发者们去深入挖掘和探索。当我们跨越了入门的门槛&#xff0c;真正开始使用通义灵码进行代码生成和开发工作…

微信小程序中使用miniprogram-sm-crypto实现SM4加密攻略

在微信小程序开发过程中&#xff0c;数据安全至关重要。本文将为大家介绍如何在微信小程序中使用miniprogram-sm-crypto插件进行SM4加密&#xff0c;确保数据传输的安全性。 一、SM4加密简介 SM4是一种对称加密算法&#xff0c;由国家密码管理局发布&#xff0c;适用于商密领…

使用 Ansys Fluent 对气体泄漏检测进行建模

了解使用 Ansys Fluent 仿真气体泄漏和确保安全的前沿技术。 挑战 气体泄漏对人类安全和环境构成重大风险。及早检测气体泄漏可以防止潜在的灾难&#xff0c;包括爆炸、火灾和有毒物质暴露。有效的气体泄漏检测系统对于石油和天然气、化学加工和住宅基础设施等行业至关重要。…

QT图形/视图架构详解(一)

场景、视图与图形项 图形/视图架构主要由 3 个部分组成&#xff0c;即场景、视图和图形项&#xff0c;三者的关系如图所示&#xff1a; 场景、视图和图形项的关系 场景&#xff08;QGraphicsScene 类&#xff09; 场景不是界面组件&#xff0c;它是不可见的。场景是一个抽象的…