2019/10/15【水果成篮】

在一排树中,第 i 棵树产生 tree[i] 型的水果。
你可以从你选择的任何树开始,然后重复执行以下步骤:

把这棵树上的水果放进你的篮子里。如果你做不到,就停下来。
移动到当前树右侧的下一棵树。如果右边没有树,就停下来。
请注意,在选择一颗树后,你没有任何选择:你必须执行步骤 1,然后执行步骤 2,然后返回步骤 1,然后执行步骤 2,依此类推,直至停止。

你有两个篮子,每个篮子可以携带任何数量的水果,但你希望每个篮子只携带一种类型的水果。
用这个程序你能收集的水果总量是多少?

 

示例 1:

输入:[1,2,1]
输出:3
解释:我们可以收集 [1,2,1]。
示例 2:

输入:[0,1,2,2]
输出:3
解释:我们可以收集 [1,2,2].
如果我们从第一棵树开始,我们将只能收集到 [0, 1]。
示例 3:

输入:[1,2,3,2,2]
输出:4
解释:我们可以收集 [2,3,2,2].
如果我们从第一棵树开始,我们将只能收集到 [1, 2]。
示例 4:

输入:[3,3,3,1,2,1,1,2,3,3,4]
输出:5
解释:我们可以收集 [1,2,1,1,2].
如果我们从第一棵树或第八棵树开始,我们将只能收集到 4 个水果。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fruit-into-baskets
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

#!/bin/bash
#水果成篮
#
declare -A fruits    #定义一个数组用于存放果树的类型,即数字的类型
declare -A guolan    #定义一个数组,作用是果篮,用于存放选择的数字类型   
declare -i jilu=0    #定义一个初始值
declare -i flag=0    #定义一个标志位
declare -i sz=0      #定义一个初始值
read -t 20 -p "请输入每棵果树水果的类型:" number   #获取用户输入的数值类型
for item in $number   #for循环将数字类型存放于数组fruits中
do
        fruits[$sz]=$item
        sz=$[$sz+1]
done
echo "${#fruits[@]}"   #获取用户输入的数字类型数量
count=`echo "${#fruits[@]}"`
read -t 10 -p "请选择从那一棵果树[1-$count]摘果:" num    #获取用户从哪一个元素开始选择
weizhi=$[$num - 1 ]        #选择数组中对应的元素,元素下标数是其位数减一
if [ $count -lt $num ];then    #判断逻辑
        echo "我们没有这么多棵树!! "
else
        while [ $[$weizhi+1] -le $count ]
        do
                echo "${guolan[@]}"|grep "${fruits[$weizhi]}" &>/dev/null
                if [ $? -eq 0 ];then
                        guolan[$jilu]=${fruits[$weizhi]}
                        jilu=$[$jilu+1]
                        weizhi=$[$weizhi+1]
                else
                        flag=$[$flag+1]
                        if [ $flag -le 2 ];then
                                guolan[$jilu]=${fruits[$weizhi]}
                                jilu=$[$jilu+1]
                                weizhi=$[$weizhi+1]
                        else
                                echo "${#guolan[@]}"
                                exit 0
                        fi
                fi
        done
        echo "${#guolan[@]}"
fi

【效果】:

[root@localhost leetcode]# ./tree_style.sh
请输入每棵果树水果的类型:1 2 1
3
请选择从那一棵果树[1-3]摘果:1
3
[root@localhost leetcode]# ./tree_style.sh
请输入每棵果树水果的类型:0 1 2 2
4
请选择从那一棵果树[1-4]摘果:1
2
[root@localhost leetcode]# ./tree_style.sh
请输入每棵果树水果的类型:0 1 2 2
4
请选择从那一棵果树[1-4]摘果:2
3
[root@localhost leetcode]# ./tree_style.sh
请输入每棵果树水果的类型:1 2 3 2 2
5
请选择从那一棵果树[1-5]摘果:2
4

此题的关键是对题目的理解:一个数组,有两个篮子,在数组中选择一个开始的元素,并把其放到一个篮子中,继续往元素查找,如果与第一个篮子的数字不一样则放到第二个篮子,一样则放到第一个篮子;遇到如下一种情况停止摘果并返回果篮的”数量“:1、此元素为数组最后一个元素 2、下一个元素与两个篮子中的元素均不一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值