自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 闫式DP分析法笔记Java实现(01背包,完全背包,区间合并,最长公共子序列)

01背包问题题目:https://www.acwing.com/problem/content/2/思路://01背包暴力解法import java.util.Scanner;public class TestA { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(),V = sc.next

2021-02-20 22:44:59 298

原创 AcWing19:找出中序遍历二叉树的后继(Java实现)

题目:找出中序遍历二叉树的后继思路:分情况讨论:1.当节点有右子树时,其后继为右子树的最左节点,如C的后继为B。2.当节点没有右子树时,比如B和D,B的后继为父节点D,D的后继为一直向上的F节点,G没有后继节点。可以发现规律,若当前节点有父亲节点,其父亲节点为其他节点的左子树,则当前节点有后继。若当前节点是父节点的左子树,则后继为其父节点;若当前节点是父节点的右子树,则一直往上找。/** * Definition for a binary tree node. * publ

2021-02-19 21:29:06 168

原创 AcWing18:重建二叉树(Java实现)

18题目:根据前序遍历和中序遍历,求二叉树思路:递归思想比较容易想,主要是递归过程中的对于前序遍历和中序遍历剩余数组边界的确定/** * Definition for a binary tree node. * class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution {

2021-02-19 12:01:43 102

原创 AcWing13+14: 找出数组中重复的数字(Java实现)

题目描述:思路:刚开始想的是建立一个统计数组,对原数组中的数字计数,若统计数组中有>1出现,则输出起index,即原数组中重复的数字。但是这样空间复杂度上来了。大佬的解题方式:若没有重复的数字,则肯定是一个数字一个坑儿。可通过遍历数组,若i位置和其放的数nums[i]不相等,则将nums[i]放入其应该在的位置[nums[i]],再将nums[nums[i]]交换到[i]。交换过后如果nums[i] != i,则说明nums[i]并不应该在i位置,说明不是一个萝卜一个坑儿了,nums[

2021-02-18 11:00:29 336

原创 牛客网刷题:发现拼写错误

题目:1. 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello2. 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello3. 上面的规则优先“从左到右”匹配,即如果是AABBCC,虽然AABB和BBCC都是错误拼写,应该优先考虑修复AABB,结果为AABCC评论区骚操作public class Main { public static void main(S

2021-02-16 15:33:47 508

原创 将一个链表\m 位置到n 位置之间的区间反转,要求时间复杂度 O(n),空间复杂度O(1)

题目描述将一个链表\m位置到n位置之间的区间反转,要求时间复杂度 O(n),空间复杂度O(1)思路:前m-1部分的节点尾插法,中间m到n-m+1头插法,后面剩下的原封不动的接上就行。import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * } */public class Solution { /** * * @para..

2021-01-08 17:48:50 592 2

原创 c++输入缓冲区的问题,cin,get(cin),getline(cin)的区别

以下知识点来源于这篇博文,感谢,侵删程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin直接从输入缓冲区中取数据。正因为cin是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin会直接取得这些残留数据而不会请求键盘输入。回顾之前的代码,你会发现连续的cin或者while循环里的getline,都不会出错,但二者混...

2020-04-17 21:27:24 191

原创 C++动态规划:最长公共子序列和最长公共子串

写在前面:本文矩阵思路来源于这篇博文flag矩阵思路来源于这边博文侵删首先区分公共子序列和公共子串的区别以loop和helloworld两个字符串为例。子串必须是连续的字符串,lo op,hel lo world,加粗斜体部分lo就是最长公共子串。子序列就不一定连续了,loo p,hel lo w o rld,加粗斜体部分loo就是最长公共子序列。解题思路#include&...

2020-04-03 13:20:54 729

原创 c++动态规划:最大连续子矩阵的和(子序列和的变体)

该题及其解题思路来源于王道机试指南,侵删问题描述:求二维矩阵最大子矩阵的和解题思路:假设二维数组的最大子矩阵是从 i 行到 j 行,那么会与两种情况:(1)当i = j 时,变成了求 i 行最大子序列和的问题。(2)当 i ≠ j 时,利用辅助矩阵 total[ ][ ],辅助矩阵保存原矩阵从上到下加起来的累加和。故total的 j 行 i 行相减即为一个一维的最大子序列,接下...

2020-03-29 23:51:07 767

原创 c++动态规划:最大连续子序列的和及其变形

以下思路来源于王道机试题这本书,侵删。动态规划算法思想:与分治法类似,将待求问题分解为若干子问题,先求子问题,在利用子问题的解返回来求原问题。因为在分治法时,求出的子问题往往不是独立的,很多值被重复计算过,比如斐波那契数列计算:F(n) = F(n-1)+F(n-2),F(n-1) = F(n-2) + F(n-3)。观察计算过程,F(n-2)在这个过程中就被重复计算了。动态规划是将算过的保...

2020-03-29 18:31:29 1172

原创 C++优先队列构造哈夫曼树

优先队列构造哈夫曼树借用博主的图用于知识复习,感谢,侵删求哈夫曼树的权值,由于优先队列默认采用大顶堆,如若采用小顶堆,按照priority_queue<typename vecotr<typename> greater<typename> >mypriorityqueue;重新定义优先队列。#include<iostream>#inc...

2020-03-26 22:44:40 628

原创 C++递归八皇后输出92种解法和一种解法两个方法

八皇后问题是递归和回溯问题,其实说白了回溯也是递归的一部分,是递归中“归”的那一步,真的是一步一步debug才对递归有了进一步了解。词穷了。。。。。。关于回溯问题,知(bi)乎这篇文章很有参考价值附上输出92种八皇后解法代码,采用定行法,下标代表行,值代表列。其他知识点:return 只能返回一层递归,并不能跳出递归。目前我只知道想跳出递归,可以用强制退出的方法。#include<...

2020-03-19 20:50:33 593

原创 C++求快速幂

刷王道机试题小记:快速幂例如求3^29,由观察知,3^29 = 3 ×\times× 3^28 = 3 ×\times× 3^4 ×\times× 3^8 ×\times× 3^16,其中分开的这几项都可以由前一项平方得到,减少了运算次数那么如何知道要拆成几项呢?因为一个数总可以写成 2^k 的和,即表示成二进制的形式,29 = 11101 = 2^0 +2^2 + 2^3 + 2^4 =...

2020-03-15 14:32:38 130

原创 整除问题,给定n和a,求最大的k,使n!可被a^k整除但不能被a^(k+1)整除

首先,这道题不可能直接算n!和a^k然后暴力解法,数太大了。那就乖乖找规律吧。以输入n=6,a = 10,为例。6! = 2×2×2×2×3×3×52\times2\times2\times2\times3\times3\times52×2×2×2×3×3×5,10 = 2×52\times52×5,如果6!可以被10^k整除,那么6!的素因数一定包含10的素因数,那么k就 =6!与10的...

2020-03-14 14:01:38 1387 3

原创 c++实现筛除法求素数和分解质因数

关于代码中的maxn变量,它实际上是和输入的n是同一量级,或者说直接可以等于n;但和普通素数求法一样,sqrt(n)就可以解决问题。知识点一:筛除法原理:若n为素数,那他的n2,n3等等,就都不是素数,在之后的筛查就直接跳过。至于为何从jj开始,是因为从j2开始,会有好多数重复计算。知识点二:vector变量做形参。有两种形式1.地址形式,除在形参处加地址符外别无区别,见最终代码。2....

2020-03-13 18:17:25 525

原创 c++实现初级kmp算法,太难了

摘于王道机试题的一段话:kmp算法是一种改进的字符串匹配算法,其核心是,模式串匹配失败后,并不是从下一字符开始重新匹配,而是利用已有信息(next数组),跳过一些不可能匹配成功的位置,以减少匹配次数。在此十分感谢这篇博文,看了一晚上只有这篇博文茅塞顿开。下面记录一下我的理解:1.在求next数组时,判断next[i] = next[j]时,相当于从最长前后缀开始匹配,以后缀为主。以最长后缀...

2020-03-12 18:39:14 342

原创 c++进制转换

当作复习参考:添加字符串的相关操作,是为了适用超过int类型长度的转换#include<iostream>#include<cstdio>#include<stack>#include<vector>#include<stdio.h>#include<string>using namespace std;/...

2020-03-12 16:52:11 212

原创 记c++刷题,拍集体照队形

#include <iostream>#include<cstdio>#include<string>#include<stdlib.h>#include <algorithm>using namespace std;typedef struct{ string name; int height;}p...

2020-03-11 22:21:11 423

原创 C++完成简单计算器带括号不考虑负数和0的运算

刷王道机试数据结构(一)栈部分的一道题步骤:1.将中缀表达式转为后缀表达式:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于找顶符号(乘除优先加减)则栈顶元素依次出找并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。2.将后缀表达式计算1. 直接读取表达式,如果遇到数字就压栈。2...

2020-03-09 22:33:04 380 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除