Leetcode485
题目:
给定一个二进制数组, 计算其中最大连续1的个数。
示例 1:
输入: [1,1,0,1,1,1]
输出: 3
解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.
注意:
输入的数组只包含 0 和1。
输入数组的长度是正整数,且不超过 10,000。
本人思路: 想利用两个数组,一个是原题目中的数组,一个是自定义数组count,count数组的作用是用来存储出现连续1后1的数量,比如 [1,0,1,1,1,0,0,1,1]这个数组,数组中是否每一个count索引存储出现连续1时1的数量,count[0]=1,count[1]=3,count[2]=2。采用for的嵌套循环,外层循环控制新数组的索引,内层循环用来控制原数组对连续1进行计数,每当碰到1就对count对应索引的元素加一,碰到0就退出本层循环,为了避免内层循环从头开始继续,需要用外层的变量对内层变量进行初始化。最后对count数组进行遍历之后提取出最大元素。
伪代码:
class Solution { public int findMaxConsecutiveOnes(int[] nums) { int[] count = new int[1000000]; int max =0; for(int j =0;j<count.length;j++) { for(int i=j;i<nums.length;i++) { if(nums[i]==1) { count[j]++; } if(nums[i]==0) { break; } } } for(int j =0;j<count.length;j++) { if(count[j]>max) { max = count[j]; } } return max; } }
蓝桥杯(1004)-母牛的故事
题目:
题目描述
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
输出
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
样例输入
2 4 5 0
样例输出
2 4 6
本人思路:
首先观察题目,不难发现母牛在前三年内的数量都为1,但在第4年开始,牛的总数等于前一年和前第三年这两年牛数量的总和,这不禁让我想到了斐波那契数列数列,这个数列从第3项开始,每一项都等于前两项之和。
所以我们只需要定义第一年和第三年牛的总数,就可以利用循环计算出对应年份的牛的总数。
伪代码:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Scanner sc = new Scanner(System.in); int[] num = new int[3]; int i =0; //hasNext使得判断为true时不断输入。 while(sc.hasNext()) { int n = sc.nextInt(); if(n==0) { break; } num[i] = cownum(n); i++; } for (int j =0;j<num.length;j++) { System.out.println(num[j]); } } public static int cownum(int x) { //定义一个长度为60的数组 int[] a = new int[60]; a[0] = 1; a[1] = 2; a[2] = 3; //类斐波那契数列 for(int i=3;i<x;i++) { a[i] = a[i-1]+a[i-3]; } return a[x-1]; } }
蓝桥杯(1020)-猴子吃桃
题目:
题目描述:
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
输入
N
输出
桃子总数
样例输入
10
样例输出
1534
个人思路:
既然知道最后只剩下了一个桃子,我们不妨采用逆向推理,从最后剩下的一个桃子上做文章,找出初始桃子总数和下一台你桃子总数之间的关系为2n+2,采用递归的方法轻松解决这道题目,关键的递归的条件就是我们知道最后仅仅剩下一个桃子。
伪代码题解:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int day = sc.nextInt(); System.out.println(eat(day)); } private static int eat(int n){ if (n==1){ return 1; } return(2+2*eat(n-1)); } }