算法
快乐的小小程序猿
乐小猿
展开
-
算法-刷算法题时Java中常用代码
Java中的ArrayList的subList() 方法用于截取并返回动态数组中的一部分。判断当前节点是不是左叶子是无法判断的,必须要通过节点的父节点来判断其左孩子是不是左叶子。map的值是Integer类型时,比较用equals。关于StringBuilder的reverse:执行。原创 2023-08-25 23:23:34 · 53 阅读 · 0 评论 -
算法-常用解题思路和技巧
双路快排:主要目的是让等于pivot的元素均匀的分到数组的两边,所以,lt和gt遇到等于pivot的元素时都要停下来(lt遇到大于的时候也要停下来,gt遇到小于的时候也要停下来),然后交换它们的值,虽然交换相等的元素没有什么意义,但是这样的操作会把等于pivot的元素均匀的分到数组的两边,避免一边的数组很长,另一边的很短。每次出一个,入好几个。如果有环,快指针一定可以追上慢指针,追上了,说明有环,就返回true,跳出循环,如果没追上,则,快指针会先到终点,为空,然后自己出循环,说明没有环,返回false。原创 2023-08-25 23:19:54 · 1036 阅读 · 0 评论 -
算法-Java堆排序模板
常用算法模板堆排序模板Java版private void heapSort(int[] nums) { int n = nums.length; // 首先建堆,即,将数组调整为大顶堆 // 将数组看成是一个完全二叉树,则最后一个非叶子结点是第n/2(向下取整)个元素,对应到数组中的索引就是n / 2 - 1,也可以等价的写成(n - 2) / 2。调整堆就从最后一个非叶子结点开始。 for (int i = (n - 2) / 2; i >= 0; i--)原创 2023-08-23 22:44:27 · 67 阅读 · 0 评论 -
算法-Java归并排序模板
常用算法模板归并排序模板Java版// 归并排序需要借助一个临时数组private int[] tmp = new int[n];private void mergeSort(int[] nums, int left, int right) { if (left < right) { // 从中间划分为两个子序列 int mid = left + (right - left) / 2; // 对左侧子序列递归进行归并排序原创 2023-08-23 22:41:45 · 63 阅读 · 0 评论 -
算法-Java三路快速排序模板
常用算法模板三路快速排序模板Java版import java.util.Random;private final static Random RANDOM = new Random();// 对nums中[left, right]闭区间的元素进行快速排序(升序)private void quickSort(int[] nums, int left, int right) { // 递归终止 if (left >= right) { return; }原创 2023-08-23 22:39:16 · 74 阅读 · 0 评论 -
算法-Java双路快速排序模板
常用算法模板双路快速排序模板Java版import java.util.Random;private final static Random RANDOM = new Random();// 对nums中[left, right]闭区间的元素进行快速排序(升序)private void quickSort(int[] nums, int left, int right) { // 递归终止 if (left >= right) { return; }原创 2023-08-23 22:36:45 · 46 阅读 · 0 评论 -
算法-Java单路快速排序模板
常用算法模板单路快速排序模板Java版import java.util.Random;private final static Random RANDOM = new Random();// 对nums中[left, right]闭区间的元素进行快速排序(升序)private void quickSort(int[] nums, int left, int right) { // 递归终止 if (left >= right) { return; }原创 2023-08-23 22:33:52 · 64 阅读 · 0 评论 -
算法-Java直接插入排序模板
常用算法模板直接插入排序模板Java版public void insertSort(int[] nums) { for (int i = 1; i < nums.length; i++) { if (nums[i] < nums[i-1]) { // 哨兵,可以减少nums[i]的交换次数 int sentry = nums[i]; // 边找插入位置,边将前面的数往后移原创 2023-08-23 22:30:12 · 39 阅读 · 0 评论 -
算法-Python并查集模板
常用算法模板朴素并查集模板Python版# 初始化,p存储每个点的父节点p = list(range(n))# 返回x的祖宗节点def find(x): if p[x] != x: # 路径压缩 p[x] = find(p[x]) return p[x]# 合并a和b所在的两个集合p[find(a)] = find(b)维护size的并查集模板Python版# 初始化,p存储每个点的父节点,size只有当节点是祖宗节点时才有意义,表原创 2023-08-23 22:25:19 · 168 阅读 · 0 评论 -
算法-Java并查集模板
常用算法模板朴素并查集模板Java版int[] p;public void test() { // 初始化,p存储每个点的父节点 int n = 10; p = new int[n]; for (int i = 0; i < n; i++) { p[i] = i; }}// 返回x的祖宗节点public int find(int x) { if (p[x] != x) { // 路径压缩 p[原创 2023-08-23 22:23:18 · 144 阅读 · 0 评论 -
算法-二叉树层次遍历模板
然后每出队一个元素,就把size减一,size减到了0就表示当前层都出队了(这时队列里是下一层的全部元素)。一层都出队完了,深度就加一。入队时,要把每一层的元素全部入队,出队时,要把每一层的元素全部出队。在把当前层全部出队前,可以通过。二叉树的广度优先搜索(层次遍历):利用队列。获取到当前层的元素个数(原创 2023-08-22 23:36:57 · 49 阅读 · 0 评论 -
算法-二叉树后序遍历模板
递归-后序遍历:(左右根)原创 2023-08-22 23:32:51 · 37 阅读 · 0 评论 -
算法-二叉树中序遍历模板
二叉树的中序遍历递归算法:(在当前节点不为空的情况下进行)原创 2023-08-22 23:29:26 · 49 阅读 · 0 评论 -
算法-二叉树前序遍历模板
递归-前序遍历:(根左右)(是一个递归定义)迭代(非递归)-前序遍历:(借助栈来完成)原创 2023-08-22 23:24:45 · 39 阅读 · 0 评论 -
算法-Python二分查找模板
参考:Python中的。原创 2023-08-22 21:04:05 · 99 阅读 · 0 评论 -
算法-Java二分查找算法模板
参考:Python中的。原创 2023-08-22 21:01:58 · 25 阅读 · 0 评论 -
算法设计基础
一、实验目的:理解蛮力法的思想及程序的执行过程;理解递推算法的思想;能较熟练地编写枚举、递推程序,对给定的问题能设计出相应算法予以解决。二、实验环境:Visual C++ 实验环境下实现并进行调试三、实验内容:编程求和:s=a+aa+aaa+aaaa+ „„+aaaa„aaa(n个),其中a为1~9中的一个数字。 提示:若第一项为a , 以后每一项由前一项乘以10加上a...原创 2018-10-30 17:21:07 · 1015 阅读 · 0 评论 -
递归与分治
一、实验目的:理解递归算法的思想和递归程序的执行过程,并能熟练编写递归程序。掌握分治算法的思想,对给定的问题能设计出分治算法予以解决。具体要求:1. 分析并掌握“棋盘覆盖问题”的递归与分治算法示例;2. 练习使用递归与分治策略求解具体问题;二、实验环境:Visual C++三、实验内容:1. Fibonacci数列 无穷数列1,1,2,3,5,8...原创 2018-10-30 17:43:49 · 852 阅读 · 0 评论 -
计算矩阵连乘积——动态规划
在科学计算中经常要计算矩阵的乘积。矩阵A和B可乘的条件是矩阵A的列数等于矩阵B的行数。若A是一个p×q的矩阵,B是一个q×r的矩阵,则其乘积C=AB是一个p×r的矩阵。由该公式知计算C=AB总共需要pqr次的数乘。其标准计算公式为:现在的问题是,给定n个矩阵{A1,A2,…,An}。其中Ai与Ai+1是可乘的,i=1,2,…,n-1。要求计算出这n个矩阵的连乘积A1A2…An,最少的乘法次...原创 2018-10-30 17:52:47 · 2116 阅读 · 0 评论 -
最长上升子序列
最长上升子序列:给出一个数列{a1,a2,...,an},要求你选出尽量多的元素,使这些元素按其相对位置单调递增。例如,有输入: 5 8 9 2 3 1 7 4 6输出为(黑体)5 8 9 2 3 1 7 4 6 最长上升子序列长度为:4。//4.动态规划解决最...原创 2018-10-30 21:10:03 · 217 阅读 · 0 评论 -
Packets问题
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 57367 Accepted: 19467 Afactory produces products packed in square packets of the same height h and ...原创 2018-07-11 11:58:31 · 1626 阅读 · 0 评论 -
I Think I Need a Houseboat问题
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 107313 Accepted: 46580 FredMapper is considering purchasing some land in Louisiana to build his hou...原创 2018-07-11 11:57:29 · 255 阅读 · 0 评论 -
Financial Management问题
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 190210 Accepted: 72165 Larrygraduated this year and finally has a job. He's making a lot ...原创 2018-07-11 11:54:55 · 382 阅读 · 0 评论 -
Hangover问题
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 130664 Accepted: 63540 How far can you make a stack of cardsoverhang a table? If you have...原创 2018-07-08 17:48:40 · 348 阅读 · 0 评论 -
铺地板问题
有一长度为 N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为 1,另一种长度为 2,数目不限。要将这个长度为 N 的地板铺满,一共有多少种不同的铺法?例如,长度为 4 的地面一共有如下 5 种铺法:4=1+1+1+1 4=2+1+1 4=1+2+1 4=1+1+24=2+2 编程用递归的方法求解上述问题。【输入】只有一个数 N,代表地板的长度【输出】输出一个数,代表所...原创 2018-07-08 17:47:02 · 1412 阅读 · 0 评论 -
第四平方和定理问题
第四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和。如果把 0包括进去,就正好可以表示为4个数的平方和。比如:5=0^2+0^2+1^2+2^2 7=1^2+1^2+1^2+2^2(^符号表示乘方的意思) 对于一个给定的正整数,可能存在多种平方和的表示法。要求你对4个数排序:0 <= a<=b<=c<=d 并对所有的可能表示法按a,b,c,d...原创 2018-07-08 17:46:17 · 1930 阅读 · 1 评论 -
找7的倍数和含有7的数问题
输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...)。【输入】一个整数 N。(N不大于30000)【输出】从小到大排列的不大于N的与7有关的数字,每行一个。【输入范例】20【输出范例】7 14 17程序代码:#include<stdio.h>int main(){ int N,i,m,a[5...原创 2018-07-08 17:45:23 · 35175 阅读 · 3 评论 -
蛇形矩阵问题
蛇形矩阵是由 1 开始的自然数依次排列成的一个矩阵上三角形。 【输入】本题有多组数据,每组数据由一个正整数 N 组成。(N不大于100) 【输出】对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。【输入范例】5 【输出范例】1 3 6 10 15 2 5 9 14 4 8 13 712 11 ...原创 2018-07-08 17:44:32 · 950 阅读 · 0 评论 -
找满足条件的数的个数问题
我们要求找出具有下列性质数的个数(包含输入的自然数 n)。先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理:1.不作任何处理;2.在它的左边加上一个自然数,但该自然数不能超过原数最高位数字的一半;3.加上数后,继续按此规则进行处理,直到不能再加自然数为止。【输入】 第一行一个数t,表示有t组数据,之后每组数据占一行,每行一个数 n 。【输出】 每组...原创 2018-07-08 17:43:41 · 2889 阅读 · 0 评论 -
教徒问题
17 世纪法国数学家加斯帕在《数学的游戏问题》中讲的一个故事:n个教徒和n个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了个办法:2n 个人围成一个圆圈,从第一个人开始依次循环报数,每数到第九个人就将他扔入大海,如此循环直到仅剩 n 个人为止。问怎样的排法,才能使每次投入大海的都是非教徒。【输入】输入文件由一行构成,就是 n 的值。【输出】输出文件中是一行字符串...原创 2018-07-08 17:42:12 · 1297 阅读 · 0 评论 -
2019年蓝桥杯练习4-高斯的日记
每周一题之4本周题目是蓝桥杯第四届省赛AB组第一题(填空题),请评论的同学除了给出答案,还要给出你的思路,特别是如果在竞赛中你会怎么做?[问题描述]大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:...原创 2019-01-10 14:45:47 · 449 阅读 · 0 评论 -
2019年蓝桥杯练习3-楼号m和n之间的最短移动距离
2019年蓝桥杯练习3-楼号m和n之间的最短移动距离[问题描述] X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为6时,开始情形如下: 1 2 3 4 5 6 12 11 10 9 8 7 13 14 15 ..... 我们的问题是:已知了两个楼号m...原创 2019-01-05 13:40:17 · 797 阅读 · 0 评论 -
2019年蓝桥杯练习2-扫雷
2019年蓝桥杯练习2-扫雷Minesweeper (扫雷)PC/UVa IDs: 110102/10189,Popularity: A,Success rate: high Level: 1测试地址:https://vjudge.net/problem/UVA-10189描述://每周一练/2#include<stdio.h>#define M...原创 2019-01-05 13:32:34 · 1055 阅读 · 0 评论 -
2019年蓝桥杯练习1-序列生成算法
2019年蓝桥杯练习1-序列生成算法3n+1问题PC/UVa IDs: 110101/100Popularity: ASuccess rate: low Level: 1测试地址:https://vjudge.net/problem/UVA-100[问题描述]考虑如下的序列生成算法:从整数 n 开始,如果 n 是偶数,把它除以 2;如果 n 是奇数,把它乘 3 加...原创 2019-01-05 13:28:01 · 2406 阅读 · 0 评论 -
子集和问题——回溯法
给定一个正整数集合X={x1,x2,…,xn}和一个正整数y,设计回溯算法,求集合X的一个子集Y,使得Y中元素之和等于y。#include<iostream>using namespace std;#define NUM 10000int n;int c;int cw;int bestw;int w[NUM];int x[NUM];int r;bool fl...原创 2018-12-28 21:41:57 · 6361 阅读 · 2 评论 -
背包问题-回溯法
0-1背包:给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得在总重量不超过背包的容量C的前提下装入背包中物品的总价值最大。#include<iostream>using namespace std;class Bag{ private: int c; //背包容量 int n; //...原创 2018-12-28 21:40:40 · 726 阅读 · 0 评论 -
删除数字求最小值
给定一个n位正整数a, 去掉其中k个数字后按原左右次序将组成一个新的正整数。对给定的a, k寻找一种方案,使得剩下的数字组成的新数最小。提示:应用贪心算法设计求解操作对象为n位正整数,有可能超过整数的范围,存储在数组a中,数组中每一个数组元素对应整数的一位数字。在整数的位数固定的前提下,让高位的数字尽量小,整数的值就小。这就是所要选取的贪心策略。每次删除一个数字,选择一个使剩下的数...原创 2018-12-28 21:37:53 · 697 阅读 · 0 评论 -
背包问题-贪心算法
1. 背包问题给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大? (说明,以下算法与教材147页给出的算法思想是一样的,教材上的算法事先对物品信息进行了排序) 代码如下:#include "stdafx.h"#include<stdio.h>#include<iostrea...原创 2018-12-28 21:36:33 · 2008 阅读 · 0 评论 -
2019年蓝桥杯练习5-翻煎饼
2019年蓝桥杯练习-翻煎饼每周一题之5 翻煎饼PC/UVa IDs: 110402/120,Popularity: B, Success rate:high Level: 2测试地址:https://vjudge.net/problem/UVA-120[问题描述] (翻译仅供参考)Stacks and Queues are often considered the bread...原创 2019-01-11 23:39:07 · 1420 阅读 · 0 评论 -
数据结构-排序算法实践
基于顺序表结构实现简单插入排序、冒泡排序、快速排序、归并排序、堆排序。原创 2020-09-22 22:22:50 · 508 阅读 · 1 评论