自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 整数的翻转(溢出问题、扩展问题)

题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。分析:因为整形数的位数有限制,所以我们必须考虑翻转之后的溢出问题。32位有符号数的取值范围是[−2的31次方, 2的31次方 − 1]用ans来表示当前更新的目标数(翻转后的数)用pop来表示当前更新的余数(结合程序理解)用x来表示当前不断更新的原始数(被翻转的数)以上三个数在每次循环后更新一次。具体思路可以参考力扣作者的分析,如下:class Solution { public int rever

2021-01-09 19:36:19 433

原创 sizeof、strlen、size、length的区别

求数组或者字符串的长度sizeof与strlensizeof是运算符,是C语言中保留的关键字,它的参数类型多重多样,包括数组、指针、类型、对象、函数等,主要用来得到数据在内存中所占用的存储空间,以字节为单位来计数。而且在编译时已经计算出结果,因此不能用来返回动态分配控件的大小。如果想使用sizeof来计算数组元素的个数,那么可以用len=sizeof(array)/sizeof(array[0])的方式求得。strlen看名字就知道这个是求字符串相关的长度,它是函数,返回c风格字符串的长度。参数只能

2020-11-29 16:20:57 663

原创 用动态规划的方式求解连续子数组的最大和

题目:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)分析:用array来表示数组,在这里的array[n]来表示

2020-11-29 01:43:32 317

原创 青蛙跳台阶及其变种类型(递归思想)

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)分析:青蛙的最后一跳可以分为两种情况:第一种是最后一跳只跳了一个台阶;第二种是最后一跳只跳了两个台阶。【最后一跳,不会影响前面的跳法总数】这句话的意思是:假如有n个台阶,跳法总数为f(n),通过上面分析可知,f(n)由两部分跳法组成:第一种是最后只能跳一个台阶,也就是前面跳了n-1个台阶。那么对于这种情况来说,最后跳的这一下,不会对前面n-1个台阶的跳法(f(n-1))产生影

2020-11-14 00:42:43 514

原创 二维数组中的元素查找(二分法的运用)

1、vector知识参考这篇博文,写得不错(https://blog.csdn.net/weixin_41743247/article/details/90635931)2、用vector来表示二维数组vector<vector > array(3);//定义了行数为3列数不定的二维数组array.size()//返回二维数组的行数array[0].size()//返回二维数组第一行的列数定义一个行列固定的二维vector数组例:vector<vector<int&

2020-11-06 01:21:04 627

原创 如何输出一个整型数的每一位(判断技巧解析)

要求:输入一个正整数,然后分别输出它的每一位数。难点:一般我们会采用while循环的方式进行循环判断,然后输出。循环条件为该整数每次进行除以10的运算之后是否商为0,即while (!(n / 10 == 0))。但是在循环体内,最后一步是要对该整数进行除以10求商的操作,这一步在当该数小于10的整数时,求商结果为0,因此循环条件就不能为真,所以导致整型数的最高一位无法输出,因此我们需要在进行求商的操作之后,来判断该商是否大于10,如果小于10,直接输出。代码#include<iostr

2020-11-02 01:39:17 1422

原创 二分法(旋转数组)

1、先说二分法二分法只对有序数组有效!使用二分法需要四个参数:数组的起始值,数组的结尾值,数组的中位值,目标值。三种情况:中位值就是目标值:1 2 3 4 5 6 7目标值在中位值左侧:1 2 3 4 5 6 7目标值在中位值右侧:1 2 3 4 5 6 7将中位值与目标值做对比后,更新上面四个参数代码如下(摘自:https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653198263&idx=2&sn=c071

2020-10-28 00:55:38 344

原创 用两个栈实现队列(队列、栈、链表)

题目要求:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。分析:

2020-10-27 01:39:32 183

原创 贪心算法——青蛙跳阶梯(递归)

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法分析:设f[i] 表示 当前跳道第 i 个台阶的方法数。那么f[n]就是所求答案。假设现在已经跳到了第 n 个台阶,那么前一步可以从哪些台阶到达呢?如果上一步跳 1 步到达第 n 个台阶,说明上一步在第 n-1 个台阶。已知跳到第n-1个台阶的方法数为f[n-1]如果上一步跳 2 步到达第 n 个台阶,说明上一步在第 n-2 个台阶。已知跳到第n-2个台阶的方法数为f[n-2]。。

2020-10-22 01:08:03 962

原创 查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。(一种特别的双重循环思想)

思路解析:因为是要输出在较短字符串中公共字符串最长的字段,而且是最先出现的那个。所以,我们可以采用暴力匹配的思想,但是有个技巧,就是从针对较短的那个字段而言,将它按照从长到短的顺序逐个分离出来。比如字符串的长度为10,那么我们就按照长度分别为10、9、8…2、1的情况来暴力匹配。由于是从长到短来匹配,因此当第一次匹配成功,即是答案。特殊的双层循环:假设字符串长度为10的s[10];那么逐渐遍历的字段为:s(0,9)//第一次匹配s(0,8)、s(1,9)//第二次匹配s(0,7)、s(1,8

2020-10-05 16:13:51 490

原创 字符串操作——字符串内增加其它符号、字符串排序(字母顺序,符号位置不变)

1、字符串内增加其它符号时:要求:字符中所有出现的数字前后加上符号“*”,其他字符保持不变。思路遇到数字先输出符号,然后判断下一位是否为数字,若是,for循环内手动增加判断值i的大小;若不是数字,直接输出。#include <iostream>#include <string>#include <vector>using namespace std;int main(){ string s,b; int len=0; while(c

2020-09-29 19:03:45 1380

原创 c++求两个数的最大公约数和最小公倍数

这里采用欧几里得算法:递归:#include<iostream>using namespace std;int get(int a,int b){ if(a==0) return b; else get(b%a,a);}int main(){ int a,b; while(cin>>a>>b) { //if(a<b) swap(a,b); get(a,b);

2020-09-26 16:47:28 2057

原创 cin、gets()、gets_s()、getline()的不同用法

cin:标准的输入流,需要头文件iostream,只能输入连续的一个字符串,中间不能有空格,否则默认以空格为中断,将字符创分为n+1段(n等于空格数);gets()是C语言的函数,需要头文件# include <stdio.h>;参数类型为 char* 型,即 str 可以是一个字符指针变量名,也可以是一个字符数组名。gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间。可以直接输入带空格的字符串gets_s()gets()可以无限读

2020-09-26 00:39:59 676

原创 等差数列求和在编程时各项位置对结果的影响

等差数列:2 5 8…等差数列前n项和公式:sum=在写编程时,第一次各项的顺序是(a1+an)/2*N,结果测试用例部分编译出现错误;分析发现(a1+an)可能是奇数,所以直接除以2,会出现小数部分被忽略的情况,因此出现误差。所有项不变,调换顺序,(a1+an)*N/2,结果测试用例全部通过,神奇,可能(a1+an)*N可以保证结果始终为偶数。...

2020-09-25 22:23:15 219

原创 棋盘路径总数算法——递归算法

对于mn规格的方格棋盘,从左上角到右下角,每次只能向右或向下走一步。递归思想:把棋盘看成坐标系,左上的坐标为(0,0),右下的坐标为(n,m);当m或者n等于0时,即在边框上,只能有一种行走方式;当两者都不等于零时,采用递归:mn如下图:等于(n,m-1)的情况加上(n-1,m)的情况总数,(n,m-1)情况如下:(n-1,m)情况如下:因为上面两种情况都只剩一步就到右下角的终点;递归开始:#include<iostream>using namespace std;

2020-09-25 15:32:03 1009

原创 字符串及字符数组的递归全排列

#include <iostream>using namespace std;void swap(int &a, int&b)//{ int temp = a; a = b; b = temp;}void a(char *lis,int b,int e){ if (b == e)//递归结束条件 { for (int i = 0; i < e; i++) cout << lis[i]; cout << endl;

2020-09-25 15:10:10 119

原创 字符串运用——密码提取(字符串中对称部分最长个数)

规则:Catcher 是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串

2020-09-24 09:54:46 147

原创 公共字符串计算_find()函数

计算两个字符串的最大公共字串的长度,字符不区分大小写测试用例:asdfaswerasdfaswerfind()函数,在找到指定字符串后,会返回字符串首字母所在字符串中的下标位置,如果找不到则返回一个特别的标记npos,所以当用find()函数作为判定条件时,使用如下格式:if(str2.find(str1.substr(i,j))!= string::npos)//如果字符串str1中,从下标i开始,长度为j的字段可以在str2中找到#include <iostream>#incl

2020-09-23 10:29:11 150

空空如也

空空如也

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

TA关注的人

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