![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
jh__chen
这个作者很懒,什么都没留下…
展开
-
异或运算解决问题
公式:1、任何数和 00 做异或运算,结果仍然是原来的数,即 a⊕0=a。2、任何数和其自身做异或运算,结果是 0,即 a⊕a=0。3、异或运算满足交换律和结合律,即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。分析:直接使用异或的方式进行求解class Solution { public int singleNumber(int[] nums) { int s原创 2022-01-27 09:20:49 · 1227 阅读 · 0 评论 -
求二叉树的路径和
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。分析:方法一、递归求解递归的方式 求每一个从根节点到叶子节点的路径。出口设置为1、root为空2、到叶子节点了,但是到叶子节点的路径节点和不为需要的值public boolean hasPathSum(TreeNode root,原创 2022-01-26 09:39:39 · 117 阅读 · 0 评论 -
给定数组构建平衡二叉树BST
给定数组构建平衡二叉树中序遍历,总是选择中间位置左边的数字作为根节点选择中间位置左边的数字作为根节点,则根节点的下标为mid=(left+right)/2,此处的除法为整数除法。官方题解:class Solution { public TreeNode sortedArrayToBST(int[] nums) { return helper(nums, 0, nums.length - 1); } public TreeNode helper(int[] n原创 2022-01-25 09:24:30 · 634 阅读 · 0 评论 -
二叉树深度的计算
计算二叉树的深度:正常递归// 直接调用即可,返回值即高度public int height(TreeNode root) { if (root == null) { return 0; } else { return Math.max(height(root.left), height(root.right)) + 1; } }减少递归// 为返回值为-1的时候表示不是平衡二叉树publi原创 2022-01-21 10:35:38 · 286 阅读 · 0 评论 -
基于float和double的简单比较
在下面这个程序 , 从13开始数字开始偏移,不是很准确。 #include <stdio.h>int main(){ float Sn=0; int k; long long r=1; scanf("%d",&k); while(Sn<=k) { Sn = (1/(1.0*r)+Sn); r++; } r--; prin...原创 2018-07-20 08:19:48 · 352 阅读 · 0 评论 -
背包问题的问题分析
数组开大一点。。。补充上一个博客原创 2019-03-06 21:28:51 · 394 阅读 · 0 评论 -
杨辉三角性质总结
杨辉三角1.定义:百度百科_杨辉三角ps:其中的有几个性质特别有意思2.我们可以利用杨辉三角的一些简单知识来解决问题如下问题:题目描述写出一个11至NN的排列a_iai,然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直到只剩下一个数字位置。下面是一个例子:3,1,2,44,3,67,916...原创 2019-03-12 21:05:31 · 5214 阅读 · 0 评论 -
洛谷1087题解
Problem Description我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,即含有“0”又含有“1”的串则称为F串。FBI树是一种二叉树,它的结点类型也包括F结点、B结点和I结点三种。由一个长度为2^N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:T的根结点为R,其类型与串S的类型相同;若串S的长度大于1,将串S从中间分开,分...原创 2019-06-02 17:31:52 · 784 阅读 · 0 评论 -
DFS-对应和的情况
题目分析:DFS设置出口,在出口的情况分成两种,一种是加,一种是不加;于是代码:#include <iostream>#include <cmath>using namespace std;long int a[25];int n,k;// 3 2// 1 2 3 bool dfs(int i,int sum){ if(i == ...原创 2019-07-22 09:17:44 · 101 阅读 · 0 评论 -
字符串的简单匹配
1603斯洛登的密码:题目描述查时却发现,斯诺登杳无踪迹。但是,在据说是斯诺登的座位上,发现了一张纸条。纸条由纯英文构成:Obama is a two five zero.(以"."结束输出,只有6个单词+一个句号,句子开头如没有大写亦为合法)这句话虽然有点无厘头,但是警官陈珺骛发现这是一条极其重要的线索。他在斯诺登截获的一台笔记本中找到了一个C++程序,输入这条句子后立马给出了相对应...原创 2019-03-09 12:59:23 · 375 阅读 · 0 评论 -
动态规划-01背包问题
题目描述金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”。今天一早金明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的NN元。于是,他把每件物品规定了一个重要度,分为55等:用整数1-51−5表示,第55等最重要。他还从因特网上查到了每件物品的价格...原创 2019-03-06 20:17:04 · 125 阅读 · 0 评论 -
基于数组的逆置
#include<stdio.h>#include <string.h>int main(){ int a[105]; int i=0,j=0; char c; do { ++i; scanf("%d",&a[i]); }while(a[i]!=0); for(i--;i>=1;i--) { printf("%d ",...原创 2018-07-27 19:44:36 · 390 阅读 · 0 评论 -
关于陶陶摘苹果(升级版)的心得
用一定的力气S去摘最多的苹果;一开始走入了一个误区,用搜索将所有可能的情况给列举出来,然后加以筛选得出最优解。当然了,这个思路也没啥问题。看了第一个题解,感觉其实只要将整个的Xi[5050]数组给排序一下就行了,然后从前往后找,挨个++;PS:冒泡排序掌握的并不是很熟练。附:冒泡排序吗的模板 for(i=0;i<n-1;i++) { for(j=i+1;j<...原创 2018-08-22 09:50:58 · 1416 阅读 · 0 评论 -
排序题解(洛谷 1583)
题目描述一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人。佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i]。然后将初始权值从大到小进行排序,每人就有了一个序号D[i](取值同样是1--n)。按照这个序号对10取模的值将这些人分为10类。也就是说定义每个人的类别序号C[i]的值为(D[i]-1) mod 10 +1,显然类别序号的取值为...原创 2018-10-09 20:25:48 · 365 阅读 · 0 评论 -
洛谷1101-搜索经典
题目如图所示: #include <iostream>using namespace std;int n,Next[8][2]={{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1}};char a[105][105];int book[105][105];int k;char alp[10];bool ...原创 2018-11-29 20:18:56 · 210 阅读 · 0 评论 -
BFS总结经验--马踏棋盘&迷宫2
BFS的基本模板:C++示例模板:vis[MAX][MAX]={0};//标记数组,要是走过这个点之后就标记为1len[MAX][MAX]; //步数数组,要是再进行一次while循环的时候len在上一个点的时候值+1map[n][m];//可能会设置成char数组,根据题意来n,m;//区域大小struct Point {//设置成一个结构体,方便求解 int x,y;...原创 2019-02-23 22:45:47 · 366 阅读 · 0 评论 -
关于快速幂模板
while(m) { if(m%2) a = a * d % p; d=d*d%p; m=m>>1;}m为奇数的时候一定要进行判断原创 2019-03-05 18:41:58 · 147 阅读 · 0 评论 -
全排列的STL操作
#include<bits/stdc++.h>using namespace std;int a[10005],n,m;int main(){ scanf("%d%d",&n,&m); for(int i=0;i<n;i++)scanf("%d",&a[i]); while(m--) next_permutation(...原创 2019-03-05 22:46:21 · 129 阅读 · 0 评论 -
动态规划-完全背包
//核心代码for(int i = 1;i <= m;i++){ for(int j = v[i];j <= n;j++){ // 完全背包从小到大遍历 f[j] = max(f[j],f[j-v[i]]+w[i]); // w[i]代表了价值大小 v[i]代表体积大小 }}题目:题目描述1.每种草药可以无限制地疯狂采摘...原创 2019-03-08 16:08:58 · 123 阅读 · 0 评论 -
基于很长数字的每个字符读取的问题
在算法中我们可能需要一位位读取某一个很大的数字,代码如下:long long b;while(b!=0){ c = b%10; //从个位一位一位读取b的值 b = b/10; //将b移位 printf("%d",c); //输出b的值} 大致思路就是这样,我们不用必须非要暴力来解决这些问题。...原创 2018-07-26 12:27:04 · 184 阅读 · 0 评论