C++
阳Younger
河南大学
展开
-
LeetCode 47. 全排列 II
used[i-1],首先i>0防止used[i-1]溢出,其次当nums[i-1]==nums[i]表示可能会出现树层重复的情况(因为可能出现used[i-1]==true的情况时,只可能出现在树枝之间,不可能出现树层之间,因为树层之间只能出现一个数),如果used[i-1]==false,即在nums[i-1]结点时,所有情况已经遍历过了,那么在nums[i]结点时,应该跳过这个结点。输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]原创 2022-09-29 12:20:36 · 127 阅读 · 0 评论 -
LCCUP‘22 力扣杯 二叉树灯饰
力扣嘉年华」的中心广场放置了一个巨型的二叉树形状的装饰树。节点值为 0 表示灯处于「关闭」状态,节点值为 1 表示灯处于「开启」状态。树状dp,枚举所用的状态转移,一共四种状态,分别是1、根结点不亮,子树全部不亮;2、根结点亮,子树全部不亮;3、根结点亮,子树全部亮;开关 3:切换 当前节点及其左右子节点(若存在的话) 上的灯的状态;开关 2:切换 以当前节点为根 的子树中,所有节点上的灯的状态;,请返回最少需要操作多少次开关,可以关闭所有节点的灯。开关 1:切换当前节点的灯的状态;原创 2022-09-25 09:47:48 · 631 阅读 · 0 评论 -
LeetCode 179. 最大数(贪心法)
用许多个数字组合成最大的数字,首先想到的是贪心,如果从字符串最左端选最大的数字,那么整体就是最大的数字。那么该如何排序,如何让两个数字组合出最大的数,利用字符串的性质:a + b和b + a这是两个数字组合的可能,例如,a = "3" ,b = "30" , a + b = "330",b + a = "303",选出最大的数“330”即可。,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。输出结果可能非常大,所以你需要返回一个字符串而不是整数。输入:nums = [3,30,34,5,9]原创 2022-09-24 14:34:27 · 235 阅读 · 0 评论 -
Strassen矩阵乘法(C++)
思路两个矩阵A,B相乘时.有以下三种方法暴力计算法. 三个for循环, 这时候时间复杂度为O(n^3).因为Cij=∑(k=1->n)Aik*Bkj,需要一个循环, 且C中有n^2个元素, 所以时间复杂度为O(n^3)分治法. 首先将A,B,C分成相等大小的方块矩阵.所以C11=A11*B11+A12*B21, C12=A11*B12+A12*B22,C21=A21*B11+A22*B21, C22=A21*B12+A22*B22用T(n)表示n*n矩阵的乘法, 所以有T(原创 2022-04-29 10:23:24 · 4572 阅读 · 2 评论 -
MergeSort(C++)
#include <iostream>using namespace std;// Merge: 对数字进行合并void Merge(int *arr,int begin,int mid,int end){ int i=begin,j=mid+1,k=0; int *temp=new int[end-begin+1]; while(i<=mid&&j<=end){ if(arr[i]<=arr[j]){ .原创 2022-03-19 00:16:37 · 1290 阅读 · 0 评论 -
快速排序(C++)
#include <iostream>using namespace std;//params *arr-数组, begin-数组的首位,end-数组的末尾void QuickSort(int *arr,int begin,int end){ if(begin>end){ return; } int tmp=arr[begin]; int i=begin; int j=end; while(i!=j){ .原创 2022-03-18 23:42:05 · 652 阅读 · 0 评论 -
如果剥离一个自然数的各个位置上的数
#include <iostream>using namespace std;int n,cnt;int arr[1000];void splitNum(int x){ while(x){ if(x<10){ arr[cnt++]=x; return; } else{ int y=x%10; // 保存个位上的数字 arr[.原创 2022-03-18 17:53:18 · 345 阅读 · 0 评论 -
如何给一组有相同数据的排名(降序)
#include <bits/stdc++.h>using namespace std;int main(){ int arr[13] = {89,78,45,23,23,19,19,19,5,5,5,3,1};//首先定义一组降序排列的数组 int arr1[13] = {0};//此数组是用来保存名次的数组,并且先初始化数组全为0 for(int i = 0;i < 13;i++) { int count = 1;//记录次序.原创 2021-05-28 17:29:17 · 800 阅读 · 0 评论 -
如何判断一组二维数组数据符合数独的定义呢?
当你不幸开始做数独的题时候,且当你不幸点进来的时候。不要烦躁,不要自我否定。默默付出,慢慢沉淀,靓丽绽放的那一天会有的,会有的!#include <bits/stdc++.h>using namespace std;void input(int arr[9][9]);//定义一个存储数独数据的函数bool isvalid(int arr[9][9]);//判断数据是否能够构成数独,详见下面具体函数bool isvalid(int i,int j,int arr[9][9])原创 2021-05-25 20:00:19 · 264 阅读 · 0 评论 -
十六进制转换十进制
#include <bits/stdc++.h>using namespace std;//把十六进制的数字转换成十进制的数字int hex2Dec(const string& hex);//将十六进制的每个字符转换成十六进制的数字int hexcharToDecimal(char ch);int main(){ string hex; cout << "Enter a hex number: "; cin >> he.原创 2021-05-14 08:19:01 · 540 阅读 · 0 评论 -
找最大最小整数
问题描述:编写一个程序,用户输入若干整数,试找出其中的最大数和最小数。#include <iostream>using namespace std;int main(){ int number; cin >> number; const int a = number; int arr[a]; //虽然数组大小是变量,编译器可以运行,但是在语法上是错误的。所以需要找到一个常数(const)b存储变量。 for(int i原创 2021-05-14 18:40:46 · 2726 阅读 · 0 评论 -
C++产生不重复随机数的方法
#include <bits/stdc++.h>using namespace std;int main(){ int number; cin >> number; const int n = number; int arr[n]; for(int i = 0; i < n; i++) { arr[i] = i;//定义一个从0到n-1不重复的数组 } srand(time(0));//.原创 2021-05-14 22:03:05 · 5464 阅读 · 2 评论 -
物理:相量代数式和相量极坐标式的互相转换
#include <bits/stdc++.h>using namespace std;//a + jb 转换 |A|φ的公式//确定公式 |A| = 根号下a*a + b*b; φ = arctanb/a;void swap1(double c, double d){ double b,e; e = c * c + d * d;//定义变量e等于|A|的平方 cout << pow(e,0.5) << endl; cons.原创 2021-05-14 22:20:49 · 4977 阅读 · 0 评论