“谷底”类题目及一些自己的思考
题目:我们把字符串A中符合下列属性的任意连续子串 B 称为“谷底”:存在0<i<B.length-1使得B[0]>B[1]>......B[i-1]>B[i]<B[i+1]<......<B[B.length>=3]。输入一个整数字符串A,输出最长“谷底”和“谷底”长度;如果不含有“谷底”则输出不存在谷底。
我是一个大一新生,这个是我们学校工作室的考核题的内容之一。作为一个还没接触过算法,C语言也接触不久的萌新,可以说这一题对我来说挺有挑战性的。
如果看成一个函数 如图 A:代表字符串A B:代表字符串B
这一题的要点是需要在字符串A中寻找到字符串B并且找到最长的字符串B
我一开始的思路是先找到每一个字符串B的左边第一个字符,然后先找B的单调递减区间,再找单调递增区间,把两个区间合起来组合成一个字符串B的区间,区间的长度为字符串B的长度,在比较每一个字符串B的长度,找到最长的字符串B。后来发现如果这样去解这一个题目的话会使的代码过于冗长,且需要的变量十分的多。
后来我一个同学给了我一个新的思路那就是通过锚定字符串B中最小的字符来确定每一个字符串B的位置,然后从这个位置向两边寻找字符串B的边界。
如图
这一种方法无疑比我之前的方法更加方便使用代码实现
上代码
#include<stdio.h>
#include<string.h>//为了使用字符数组
int main()
{char number[20] = {};//定义一个字符数组用来储存每一位数字int len=0,len_1=0,len_2=0;//用来确定数组长度,谷底区间长度int i, k,h;//用来作为数组下标printf("输入:");getchar();gets_s(number);//把数字作为字符串放入数组中len = strlen(number);//求得字符串长度数。for (i = 0; i <= len - 1; i++){if (number[i]<number[i - 1] && number[i + 1]>number[i])//用于求出谷底数位置{for (k = i; number[k + 1] > number[k]; k++){}//用于求右峰位置for (h = i; number[h - 1] > number[h]; h--){}//用于求左峰位置len_1 = h + k - 3;//求出谷间长度if (len_2 >= len_1)//求出最长谷间长度len_1 = len_2;}}printf("输出:%d", len_1);if (len_1 == 0)printf("解释:不含谷底");else{printf("解释:最长谷底是");for (h = h; h <= k; h++)//输出谷间{printf("%c", number[h]);}printf("长度为:%d", len_1);}return 0;
}
这就是使用这一种方法的解题代码
其中的关键在于
for (i = 0; i <= len - 1; i++){if (number[i]<number[i - 1] && number[i + 1]>number[i])//用于求出谷底数位置{for (k = i; number[k + 1] > number[k]; k++){}//用于求右峰位置for (h = i; number[h - 1] > number[h]; h--){}//用于求左峰位置len_1 = h + k - 3;//求出谷间长度if (len_2 >= len_1)//求出最长谷间长度len_1 = len_2;}}
- 使用第一个循环来检索数组中的每一个字符元素。
- 使用一个判断来确定每一个字符串B的最小字符。
- 使用两个循环来分别找出左值和右值。
- 使用一个判断来找到最大字符串B长度。
这一个方法不仅可以作用于这一个题目还可以用于其他类似的题目,其符合的条件应该要满足
1、在一长串的数中找一段数
2、每一段数存在对称性
如果这两个条件满足大概率是可以运用这一个方法解决问题的。
第一次写博客,如果有不对的地方欢迎各位大佬的斧正。
“谷底”类题目及一些自己的思考相关推荐
- 河北省国家电网计算机专业,河北省国家电网计算机类题目库.doc
河北省国家电网计算机类题目库 一.单项选择题 习题一 计算机基础知识 1.世界上首次提出存储程序计算机体系结构的是 .冯·诺依曼 A. 查尔斯· 巴贝奇 B. 阿伦· 图灵 C. 乔治· 布 尔D.冯 ...
- 2020年国考申论备考:评价类(观点)题和理解类题目的辨析
2020年国考申论备考:评价类(观点)题和理解类题目的辨析 提起申论,很多人对理解类和评价类这两种题型会感到头疼,一方面是材料相对较为分散.复杂,另一方面就是答题逻辑和答案的梳理也比较繁琐.甚至有时候 ...
- 蓝桥杯——机器人行走(模拟类题目)Java语言实现
目录 1.题目内容: 2.解题思路 2.1.小车方向描述: 2.2.字符串指令分解 2.2.1.正则表达式法 2.2.2.数组分解法 原题OJ平台链接:https://www.lanqiao.cn/p ...
- 漫画:震惊!直觉误判类题目在面试时是如何坑人的?
今天是小浩算法"365刷题计划"第74天.继续为大家分享一道有趣的概率类问题(是有小伙伴咨询我的,在面试时会被问到哈~) 01 PART 硬币问题 小知识:硬币类型的问题经常会被用 ...
- 产品经理之产品类题目
文章目录 一.设计类目 1.1 题目举例 1.2 题目拆解 1)审题 2)用户需求 3)产品设计 4)结构化表达 二.改进类题目 2.1 题目举例 2.2 题目拆解 1).用户维度 2).需求分析 3 ...
- c++账户类 题目描述
账户类 题目描述 定义一个基类Account,数据成员包含string类变量userName用于保存账户主人姓名,函数成员包括默认构造函数.带参构造函数用于初始化数据成员和输出姓名的成员函PrintN ...
- 力扣刷题心得(设计类题目)
设计类题目基本考察的是你对现实事物的抽象能力,一般会遇到一些类的设计.字符串切分.集合的使用(list.map.set.stack.deque)等,结束后我会更新一些关于这些集合的常见使用方法和场景. ...
- 二元一次函数最值问题_初二上学期,一次函数方案设计最值问题,两类题目解题思路不一样...
方案设计问题在一元一次方程实际问题中有所接触,在一次函数实际应用题中也有.一次函数中的方案设计问题,常与一次函数的性质.不等式(组).方程组等知识点相结合,这类题目一旦掌握解题方法,难度不是很大.本篇 ...
- 20210310 20210311 :栈、队列、堆类题目合集
栈.队列.堆类题目合集 写在前面 题目列表 思路分析 代码实现 写在前面 栈.队列.堆基本的题目就是这些,需要特殊技巧的另算,重写一遍保证熟练掌握这些题目并且达到熟练使用的程度.记录以便后续再次学习. ...
最新文章
- 《虚拟化与云计算》读书感(三)数据中心的概述
- Python控制流:顺序结构、分支结构、循环结构+for、if ... else、while、if... elif...elif..else、if
- 100c之50:到底谁在说谎
- python小学生教材-python纳入小学生教材,以后该如何辅导娃的作业?
- html5调盒子边框大小,CSS3 - 盒子大小(CSS3 - Box Sizing)
- 详解@Autowired、@Qualifier和@Required
- 在Application_Error事件中获取当前的Action和Control
- 2016大数据发展7大趋势
- C#设计模式之18-备忘录模式
- APIO/CTSC2017游记
- 苹果开机启动参数说明
- 使用Visual Studio开发游戏——微软宣布与Unity、Unreal Engine和Cocos展开全新合作
- ZeroMQ API简介
- 必须全网曝光这几个公众号
- thinkphp5 mysql加1_ThinkPHP5.1的数据库链接和增删改查
- html期末作业代码网页设计 我的家乡网站设计——我的家乡-四川成都(4页) HTML+CSS+JavaScript
- mysql mtq_Mysql常用简介 - osc_r3mtqivi的个人空间 - OSCHINA - 中文开源技术交流社区
- 黄金分割法 ( 三分法 )
- Android 隐藏/透明小白条
- 嵌入式系统与通用计算机系统的区别,嵌入式操作系统和通用计算机系统两者有什么不同之处...
热门文章
- VS MFC Dlg
- 关于MFC中的MS Shell Dlg字体
- python热图_Python-Seaborn热图绘制的实现方法
- 永磁同步电机矢量控制(三)——电流环转速环 PI 参数整定
- 蓝牙解码格式哪个最好_蓝牙耳机哪个品牌最好?百位声学工程师说了真心话!_...
- !! MACD战法总结
- January 04th, 2018 Week 01st Thursday
- 软件测试职业发展规划
- softmax+cross-entropy的前向计算、反向传播的公式推导
- 传奇从这里诞生--JAVA的N个十