
算法
文章平均质量分 53
Coisini_甜柚か
我的征途是星辰大海,我要去的地方是春暖花开。
展开
-
冒泡排序、插入排序、选择排序
冒泡排序、插入排序、选择排序推荐知乎博客:排序算法之选择排序十大经典排序算法(动图演示)冒泡排序JavaScript代码实现、Python代码实现、Go代码实现、Java代码实现、PHP代码实现、C语言代码实现、C++语言实现、C#语言实现、Ruby语言实现、Swift语言实现冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会原创 2021-12-29 10:57:51 · 177 阅读 · 0 评论 -
LeetCode力扣(27. 移除元素)----Java/JavaScript/C
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝int l原创 2021-12-24 11:21:29 · 255 阅读 · 0 评论 -
LeetCode第一题两数之和---JavaScript
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], target = 6原创 2021-12-22 09:40:26 · 139 阅读 · 0 评论 -
LeetCode二分法---C语言
二分法—C语言定义:二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。二分法查找的思路如下:首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。如果某一步数组为空,则表示找不到目标元素。二分法查找的时间复杂度O(logn)。实例:在排序数组中查找元=元素的第一个和最后一个位置,给定一个按照升序排列的整数数组nums,和一个目原创 2021-12-21 15:38:44 · 341 阅读 · 0 评论 -
LeetCode输入字符串,倒序输出---C语言
输入字符串,倒序输出—C语言#include<stdio.h>#include<string.h>#include <iostream>using namespace std;#define N 20int main(int argc, const char *argv[]){ char str[N] = "\0"; int i, n; printf("输入一个字符串:"); cin>>str; n = strlen(str);原创 2021-12-20 16:19:49 · 403 阅读 · 0 评论 -
枚举算法:最小连续n个合数。试求出最小的连续n个合数(其中n是键盘输入的任意正整数)。
最小连续n个合数。试求出最小的连续n个合数(其中n是键盘输入的任意正整数)。思路:判断素数合数,同时计数,然后数量满足n个的合数,得到其区间,输出。流程图:代码:#include<time.h>#include<stdio.h>#include<math.h>int main() { double op,ed; double time; op=clock(); long c,d,f,m,j; int t,n; printf("请输入n:")原创 2020-12-19 00:36:46 · 2232 阅读 · 2 评论 -
枚举算法:合数世纪探求。定义一个世纪的100个年份数字中不存在一个素数(即100个年份数字全为合数)的世纪为合数世纪。探索最早的合数世纪。
合数世纪探求。定义一个世纪的100个年份数字中不存在一个素数(即100个年份数字全为合数)的世纪为合数世纪。探索最早的合数世纪。思路:判断连续100年有几个素数,几个合数,不满足条件就一直往后推,直到s==50即可,输出答案。代码:#include<time.h>#include<stdio.h>#include<math.h>int main() { double op,ed; double time; op=clock(); long a,b原创 2020-12-19 00:33:27 · 2177 阅读 · 1 评论 -
枚举算法:完美综合式
完美综合式思路:先确定好9个数字的范围为0~9,并且9个数字不能重复,然后9个数字根据需要组合成4个新的数,然后带入题中的式子进行运算,确定好每个数字,最后输出即可。代码:#include<time.h>#include<stdio.h>#include<math.h>int su(int s){ int f=1; for(int i=2;i<=s/2;i++) { if(s%i==0) //能整除为合数原创 2020-12-19 00:29:13 · 1798 阅读 · 2 评论 -
枚举算法:概率计算。在标注编号分别为1,2,...,n的n张牌中抽取3张,试求抽出3张牌编号之和为素数的概率。输入整数n(3<n<=3000),输出对应的概率(四舍五入到小数点后第3位)。
概率计算。在标注编号分别为1,2,…,n的n张牌中抽取3张,试求抽出3张牌编号之和为素数的概率。输入整数n(3<n<=3000),输出对应的概率(四舍五入到小数点后第3位)。思路:组合问题,先求出组合后一共有多少种组合方式,化简后为sum=n*(n-1)*(n-2)/6,现在只需要确定和为素数的3张牌有几组,第一个数i取值范围(1,n-2),第二个数j取值范围(1+i,n-1),第三个数k取值范围(j+1,n),三个数求和s,最后判断有num个s是素数,概率则为per=num/sum。流程原创 2020-12-19 00:23:06 · 1659 阅读 · 2 评论 -
枚举算法:韩信点兵。
韩信点兵。韩信在点兵的时候,为了知道有多少名士兵,同时又能保住军事机密,便让士兵排队报数。 按从1至5报数,最末一个士兵报的数为1。 再按从1至6报数,最末一个士兵报的数为5。 再按1至7报数,最末一个士兵报的数为4。 最后按1至11报数,最末一个士兵报的数为10。 你知道韩信至少有多少名士兵?思路:设原来有x名士兵,根据报数的情况可以得到,x%5= =1,x%6= =5,x% = =4,x%11= =10,并且这几个情况需要同时满足。由此可以得出结果x。流程图:代码:#includ原创 2020-12-19 00:18:34 · 2524 阅读 · 1 评论 -
枚举算法:求解不等式
求解不等式思路:分子为1始终不变,分母每次增加一个1/n,直到第n项,分母已经增加到1+1/2+1/3+…+1/n,所以中间的等式为分母求倒再与之前的分数相加,最后算n在(2010,2011)这个范围内的取值。流程图:代码:#include<time.h>#include<stdio.h>int main(){ double op,ed; double time; op=clock(); int a,b,m; printf("请输入两个数:"); sc原创 2020-12-19 00:12:25 · 456 阅读 · 1 评论 -
枚举算法:试统计正整数n的阶层n!=1*2*...*n尾部连续零的个数。
试统计正整数n的阶层n!=12…*n尾部连续零的个数。思路:首先通过常用对数累加和s=lg2+lg3+…+lg n确定n!的位数m=s+1,即a数组元素的个数。设计两重循环,模拟整数竖式乘法实施各数组元素的累乘:乘数k依次为2,3,…,n。累乘积各位存入aj。实施乘运算:t=a[j]*k+g;a[j]=t%10;g=t/10;尾部连续零的个数统计:从j=1时低位a[j]开始,a[j]=0时j++;做统计,直到a[j]!=0时结束。流程图:代码:#include<time.h>#in原创 2020-12-19 00:07:50 · 538 阅读 · 2 评论 -
枚举求解:试把一个正整数n拆分为若干个(不少于2个)连续正整数之和。例如:n=15,有3种拆分:15=1+2+3+4+5,15=4+5+6,15=7+8。 对于给定的正整数n,求出所有符合这种拆分要求
试把一个正整数n拆分为若干个(不少于2个)连续正整数之和。例如:n=15,有3种拆分:15=1+2+3+4+5,15=4+5+6,15=7+8。 对于给定的正整数n,求出所有符合这种拆分要求的连续正整数序列的个数。思路:定义变量s实施连续项求和,设计i(1(n-1)/2)循环为连续项求和的起始项,j(i(n+1)/2循环作为连续求和的累加项。在j循环中每加一项j后检测是否出现s>=n。若未出现,所求连续项之和s不足n,则继续往后求和。若出现s>=n,所求连续整数之和s已达到或超过n,即退出原创 2020-12-18 23:56:10 · 3048 阅读 · 4 评论 -
枚举算法:试求解两个给定正整数m,n的最大公约数(m,n)。
试求解两个给定正整数m,n的最大公约数(m,n)。设计思路若m>n,则最大公约数最大可能是n,最小可能为1,于是设置c循环枚举从n开始递减至1的所有整数,在循环中逐个检测整数c,是否满足田间m%c=0且n%c=0。若满足该条件,说明c同时是m、n的约数,即c是m、n的公约数。由于循环变量c从n开始递减至1,最先出现的公约数显然为最大公约数,则输出最大公约数gcd(m,n),退出循环结束。流程图代码:#include<time.h>#include<stdio.h>原创 2020-12-18 23:46:35 · 2308 阅读 · 1 评论 -
枚举算法:求两个整数m,n(m>n)最大公约数的欧几里得算法描述。
求两个整数m,n(m>n)最大公约数的欧几里得算法描述。思路:(1)m除以n得余数r;若r=0;则n为所求的最大公约数。(2)若r!=0,以n为m,r为n,继续(1)。流程图:代码:#include<time.h>#include<stdio.h>int main() { double op,ed; double time; op=clock(); long m,n,c,r; printf("请输入整数m,n:"); scanf("%ld%ld原创 2020-12-18 23:40:51 · 702 阅读 · 1 评论