一、回顾昨日
昨天学习的内容是循环,常用的循环语句就是for循环和while循环,两者之间可以相互转换,因此具体了解其中一种就可以了。
//for循环语法格式:
for(初始化表达式;条件表达式;执行表达式){
循环体;
}
//while循环语法格式:
初始化表达式;
while(条件表达式){
循环体;
}
二、今日所学
今日学习内容:
《LeetCode零基础指南》(第三讲) 一维数组
其实在看这一部分时,我有一点点懵。
然后我想应该是这么理解吧:
int a[8] = {9,8,7,6,5};
因此,在这个数组中,它的容量是8,但它的长度是5。
还有这个爬楼梯问题,我不是太理解怎么就抽象成斐波拉契数列了,理是这个理我懂,但就是爬楼梯不懂,英雄哥下面的的注释我也明白,可我就是不知道为什么,就卡这了,就很纠结,这到底是怎么想出来的,我就是这个逆向思维怎么逆呀也逆不明白。好痛苦,期待大佬能带我脱离苦海,帮我想个通俗易懂的栗子。我知道肯定会有人不理解都已经讲得清清白白,为什么我还在这里头绕,别问,问也是我不知道。【无奈.jpg】
完了,今天问题格外多,还是我的思维问题,期待有大佬能帮忙掰扯掰扯,【拜托拜托】
三、解题记录
#剑指Offer II 069 山峰数组的顶部
这道题我其实做的很笨,题目示例给的都是最大值两边都是递增或者是递减的,一开始我就想,那就直接从头循环遍历,找到一个值比它下一个值大的元素就行,返回该值的下标,但是之后我自己编写案例的时候测试了几组类似于[24,69,100,99,29,320,79,78,67,36,26,19]
这样的数组,但是它返回的是5,也就是元素320的下标。元素100也可以算是一个峰值,但是它并不是最大的元素,题目要求的是,只有该峰值两边的元素都比它小,才返回该峰值的下标。
因此我才给出如下的解决方案:
int peakIndexInMountainArray(int* arr, int arrSize){
int max = arr[1];
for(int i=1;i<arrSize;i++){
if(arr[i]>max){
max=arr[i];
}
}
for(int i=1;i<arrSize;i++){
if(arr[i+1]<arr[i]&&arr[i]==max){
return i;
}
}
return 1;
}
第一步:先找出所有元素中的最大值;
第二步:找到一个峰值就判断它是不是最大值,如果是则直接返回,不是则继续循环遍历。
至于,其他几道题英雄哥已经讲得很清楚了。
四、总结
编程思维是真的很重要呀,如果不刻意去训练,有些点你是真的想破脑袋都没得办法。练,就得练,不自己多敲,不自己多学着点,不自己多想着点,不自己多踩几个坑,是没办法成长的。真正优秀的程序员都是伤痕累累的,我们这些小菜鸟还是得继续加油哇!