c++哈希表实现全排列问题

leetcode:47.全排列II 给定一个可包含重复数字的序列nums,按任意顺序返回所有不重复的全排列。排序就是相邻元素如果相同的话且前一个进行处理后,下一个相同元素就不进行处理;本题的区别是相同元素的重复组合需要进行过滤,来源力扣(LeetCode)... 阅读详情
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <set>
using namespace std;
int n;
bool ht[105]={false};//用哈希表记录该数是否已经使用过
int p[105];//记录每一个全排列
int ans=0;
void nqueen(int a)
{
   if(a==n+1)
   {
       ans++;
       return;
   }

   for(int i=1;i<=n;i++)
   {
       if(ht[i]==false)
       {
           int flag=1;
           for(int pre=1;pre<a;pre++)
           {
               if(abs(p[i]-i)==abs(a-pre))
               {
                   flag=0;
                   break;
               }
           }
        if(flag)
       {
           p[a]=i;
           ht[i]=true;
           nqueen(a+1);
           ht[i]=false;
       }
       }

   }

}
int main()
{
    cin>>n;
    nqueen(1);
    cout<<ans<<endl;
    return 0;
}

 

 

c + + 哈希表实现数字排序 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个处于区间[−500000,500000]的整数,每个数后有一个空格。 立即下载

相关推荐

ONNC Open Neural Network Compiler 开源神经网络编译器 一个 开源、模块化、可重用编译器算法和工具链的库,专门针对深度学习加速器(DLA)部署导入ONNX模型

ONNC是一个集合了开源、模块化、可重用编译器算法和工具链的库,专门针对深度学习加速器(DLA)。ONNC从底层开始构建,旨在将ONNX中间表示(IR)翻译成专有DLA代码。其软件架构设计强调可移植性和可重用性,从而简化了开发新后端的工作。上图展示了ONNC软件栈的顶层框图。软件栈从导入ONNX计算图模型到输出相应的硬件二进制文件,展示了各个功能块。

万有文的博客 1992

1到n全排列的hash函数(o(n))

全排列的hash函数,可以利用N位变进制,一般做法是用逆序数,但时间复杂度比较大。 设n位变进制数M,+i位逢i+1进一,显然M可表示的数的范围为[0, n!)共n!个 要生成n个数的排列,可以先从n个数挑一个,再从剩下的n-1个数挑一下,如此反复n次。 若最初的n个数是 0,1,2 ... n-1,第一次挑选的数是t,则可以将t放入到M的n-1位, 若第二次挑选的数是m,则 0 ...

weixin_33709590的博客 168

用户存续期价值评估CLV(二) BG/NBD Model python模拟

BG/NBD Model …继续 想象每一个客户有两个硬币,一个“Buy Coin"控制客户购买的概率;一个"Die Coin"控制客户流失、不再购买的概率。 前面假设了客户的交易次数服从泊松过程: 在一年中的每个月,客户都以抛硬币的方式来决定是否购买。我们所观察到的购买次数取决与泊松分布的参数 ????。 %matplotlib inline import numpy as np impor...

weixin_43171270的博客 3426

C++哈希表最详细解决

哈希表及相关力扣题

qq_59993282的博客 1955

Ubuntu离线情况下安装gcc编译器

Ubuntu离线情况下安装gcc编译器1.系统版本2.安装说明3.异常处理 1.系统版本 (1)Ubuntu系统版本:20.04.1LTS; (2)gcc编译器版本:gcc-9.3.0(下载链接为https://download.youkuaiyun.com/download/qq_18350351/13762214); 当前可找到的gcc最新版本为gcc-10,但是笔者在安装gcc-10版本时发现一些依赖项无法安装,因此选取了gcc-9版本。如果是在联网情况下安装,直接使用apt相关的安装指令即可。 2.安装说明 安

GreenHand的博客 3933

Arm Neoverse CMN-700 SLC内存系统与缓存分区技术解析

现代处理器架构中,缓存一致性协议与内存子系统设计直接影响系统性能。Arm Neoverse CMN-700采用的SLC(System Level Cache)通过16-way组相联设计实现高效数据缓存,其物理地址索引机制支持灵活的way分区配置。在软件可配置内存(OCM)模式下,SLC可作为独立内存空间使用,通过寄存器控制实现模式切换与区域锁定。缓存分区技术则通过请求源分类和way-based分配策略,满足实时性任务与吞吐量场景的不同需求。这些技术在5G基站、边缘计算等低延迟场景中具有重要应用价值,特别是C

weixin_30263073的博客 613

【数据结构篇C++实现】- 哈希表

有关散列表(哈希表)数据结构的知识点总结

陈七的博客,学习知识分享,期待与大家的交流 4255

(目录)微气候模型ENVI-met模拟的基本使用教程

ENVI-met模拟操作系列(一) 介绍:

ysqzhatian的博客 2万+

[数据结构][C++] 查找和排序(哈希表存储基本思想)

哈希表类概念摘要 哈希表类SqHash的建立、查找。设有若干个学生的考试成绩,采用除留余数求哈希地址,将学生的信息存储到该地址空间,并且采用线性探测法解决冲突问题。 哈希表又称散列表。 哈希表存储的基本思想是:以数据表中的每个记录的关键字 k为自变量,通过一种函数H(k)计算出函数值。把这个值解释为一块连续存储空间(即数组空间)的单元地址(即下标),将该记录存储到这个单元中。在此称该函数H...

Keith_Prime的博客 3631

目前固态激光雷达在机器人领域的应用难点汇总

固态激光雷达在机器人领域面临性能与成本的双重挑战:探测性能上,动态范围不足(60-80dB)导致高/低反射物体识别困难,近距盲区(30-50cm)与长距精度(±3cm)矛盾突出;结构上视场角与点云密度难以平衡,多雷达拼接又带来同步误差。成本方面,核心元件(SPAD/OPA芯片)良率低(<50%)、校准工序复杂,单机成本超200美元。环境适应性上,粉尘附着、振动偏移(±2°)和光衰(1万小时衰减15%)制约可靠性。

start_up_go的博客 481

手把手实现STM32+ESP8266+原子云服务器+手机APP应用——第三节-编写STM32程序实现STM32+ESP8266+原子云服务器+手机APP互相通信—远程数据传输及控制灯

接上一篇,本节使用原子云服务器。编写STM32程序实现STM32+ESP8266+原子云服务器+手机APP互相通信—远程数据传输及控制灯。使用的硬件包括:STM32F103(任意其他款系列也可以的)、正点原子ATK-ESP8266、LED灯。实现编写STM32程序代码来传输单片机数据到原子云服务器和手机APP进行显示,同时通过手机APP和原子云服务器可以远程控制单片机,例如本节实现远程点/灭灯,以此可以扩展开发更多的功能。本专栏本系列的相关文章可查看下面链接:

嵌入式阿齐Archie 8414

哈希排序C++

想象一下,你有一堆杂乱无章的物品,想要按照某种顺序进行排列。这时,你突然想到一个好主意:给每个物品分配一个独特的编号,然后根据编号快速找到它在有序列表中的位置。通过哈希函数将数据映射到哈希表中,我们可以迅速定位并排序数据。在计算机科学中,哈希排序是一种基于哈希表的排序算法。它利用哈希表的特性,将无序数据快速转化为有序状态。本文将通过生动的实例,带你领略哈希排序的魅力。作为哈希表,将数据项作为键,存储其原始下标和值。然后,我们遍历哈希表,根据原始下标还原排序后的值。这样,我们就可以得到一个有序的数组。

Luo_Yang111的博客 1083

12、无人机系统的建模与仿真

本文深入探讨了无人机系统的建模与仿真技术,涵盖其发展需求、历史演变、动力学建模方法、常用参考框架与状态变量表示,并分析了在控制系统设计、操作员培训和子系统测试中的关键应用。文章还介绍了不同类型无人机(固定翼、旋翼、混合翼)在建模与仿真中的差异,提出了多学科融合、高精度实时仿真及VR/AR技术等未来发展趋势,并给出了实际建模与仿真的标准操作流程,为无人机系统的设计与优化提供了全面的技术支持与展望。

websocket5live的博客 196

胡凡算法之——全排列问题

首先来看一下关于全排列的思想,很明显就是一个递归问题,后面的数是前面没有出现过的数即可。 具体代码如下: #include&lt;iostream&gt; using namespace std; const int maxn=11; int n,P[maxn],hashTable[maxn]={false};//用P去存数字,hahTable去检验一个数字是否已经出现过; ...

dyyay521的博客 278

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

n皇后问题

先阐述一下n皇后问题,在一个n行n列的棋盘上放置n个皇后,任两个皇后都不能处于同一条横行、纵行或斜线上。 此问题可以转换为全排列问题,对于下图,可将下图皇后的位置记录为一维数组{4,2,8,5,7,1,3,6},4代表的意思是第一列第4行有一个皇后,这样求1~n的全排列,得到的方案是不在同一行也不在同一列的,再去除对角线上的不合理方案即可。 #include "iostream" ...

李文龙的博客 220

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

代码随想录Day31 | 回溯 491.递增子序列 46.全排列 47.全排列 II

三数之和。

weixin_44645059的博客 583

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

代码随想录算法训练营第二十九天 | 491.递增子序列、46.全排列、47.全排列 II

去重是横向遍历时需要做的事情,可以使用一个unordered_set,在每一层遍历时,判断当前遍历的元素是否已经遍历过,如果遍历过,那么就跳过。这里需要判断去重,去重的方法是:横向遍历过程中,判断该下标对应的元素是否已遍历过,如果已遍历过,则跳过。也可以不用unordered_set,对nums排序,然后在横向遍历时,判断当前元素与上一个元素是否相同,如果相同则跳过。分为横向和纵向两个维度的遍历,横向遍历是遍历当前元素,添加入路径path,纵向遍历是递归地遍历path的下一个元素。

owlmo的博客 994

DAY29|491.递增子序列、46.全排列、47.全排列 II

具体来说,backtracking函数接受两个参数,一个是数组nums,一个是startIndex表示从哪个位置开始寻找递增子序列。该函数内部使用了一个vector<int> vec来存储当前找到的递增子序列,使用了一个unordered_set<int> uset来判断当前数是否已经使用过。如果vec中已经有元素且当前元素小于vec中的最后一个元素,或者当前元素已经被使用过,则直接跳过这个元素,否则将当前元素加入vec中,继续向后搜索,直到达到数组末尾或者vec中的元素个数达到2为止。

bianbian111111的博客 141

力扣日记2.21-【回溯算法篇】46. 全排列

全排列本质上也是组合问题,其特点是:全:要求需要取到集合所有值才行(到了叶子节点才能放入result)排列:则说明相同值但不同排序得到的组合是不同,这样则要求,在每次for循环时都需要从最前面开始遍历(不需要之前组合和子集问题的startindex),但这样需要考虑避免在纵向递归取到重复的值,即要做到在for循环遍历时,只有未取过的值才进行取值遍历。关键是通过一个used数组(哈希表)记录取过的值,即在for循环每次取值前,判断当前值在used。

RobinChan730的博客 625

2021-06-03

全排列(C++实现) 全排列问题涉及:递归,hash,dfs(深度优先遍历) //DFS、递归、哈希 #include<iostream> using namespace std; const int maxn=11; int n,p[maxn],hashtable[maxn]={false}; //当前处理排列的第index号位 void generateP(int index){ if(index==n+1){ //递归边界,已经处理完排列的1~n位 for(int i=1;

m0_46295945的博客 134

代码随想录Day26-回溯:力扣第46m、47m、332h题

今天做了目前接触到的第二道hard,这道hard也没有想象中的难,但还是不能独自AC,而且也搞了好久,回溯专题准备结束噜。

Jerome_zp的博客 142

牛客竞赛语法入门班数组栈、队列和stl习题【未完成】

题单地址:https://ac.nowcoder.com/acm/contest/19850?from=acdiscuss 目录老子的全排列呢装进肚子牛牛的三角形[NOIP1998]拼数好串Rails栈和排序吐泡泡Keep In LineNumber指纹锁younik要排号 老子的全排列呢 #include<bits/stdc++.h> using namespace std; int a[15]; int main(void) { for(int i=0;i<8;i++) a[i].

辉小歌的博客 674

算法训练DAY29

【代码】算法训练DAY29。

weixin_66826367的博客 111

剑指力扣

剑指力扣 文章目录剑指力扣链表206 反转链表 & 剑指 Offer 24 反转链表(简单)876 链表的中间结点(简单)剑指 Offer 06 从尾到头打印链表(简单)1290 二进制链表转整数(简单)141 环形链表(简单)24. 两两交换链表中的节点(简单)2. 两数相加数组剑指 Offer 03. 数组中重复的数字(简单)剑指 Offer 45. 把数组排成最小的数(中等)剑指 Offer 56 - II. 数组中数字出现的次数 II(中等)46. 全排列239. 滑动窗口最大值(困难)字符

LivingMu的博客 339

组合的输出

#include<bits/stdc++.h> using namespace std; int tmp[22],mark[22]; int n,r; map<string,int>m; void dfs(int dep) { if(dep==r) { string k=" "; for(int i=1;i<=r;i++) { k+=tmp[i]+...

m0_46297777的博客 419
上一篇: String Subtraction (20)
下一篇: codeup 2018 Problem B数列
Yolo_Fs
博客等级 码龄9年 41粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值