特斯拉的编程题目4.12--最长二值切片长度

题目描述:

题目思路:
1)首先设置一个数组装两个不一样的数
2)前期通过size值进行判断,是的数组中装了不一样的数,才开始主函数
3)设置一个开始节点(最长切片的开始位置)和重新开始节点(如果上一个不是最长,需要重新开始的位置)
遍历数组中每个数,有三种情况
(1)如果在同集合中数相同,且与上一个节点不同那么开始节点不变,改边重新开始节点
(2) 如果在同集合中数相同,且与上一个节点相同,那么开始节点不变,重新开始节点也不改变
(3) 如果在同集合中数不相同,那么开始节点不变变为重新开始节点,重新开始节点变为现在的值,且把数组中第一个数去掉,第二个数移动到第一个,目前遍历的数添加到末尾。
4)得到最大的长度。

package tsl;

public class demo2 {
    public static void main(String[] args) {
        int[]A=new int[]{0,0,4,3,4,3,5,5,5,9};
        System.out.println(solution( A));
    }
    public static int solution(int[] A) {
        //进行查找
        int[] data=new int[2];
        int start=0;    //开始的位置
        int start1=0;    //更新的位置
        int length=0;   //只有两个数的长度
        int size=0;
        for(int j=0;j<A.length;j++){
            if(j==0){             //第一个数
                data[0]=A[j];
                start=j;
                size++;
            }else if(size<2 && A[j]==A[j-1]){   //数组没满,只有一个数情况
            } else if(size<2 && A[j]!=A[j-1]){  //数组没满,能凑齐两个数情况
                data[1]=A[j];
                start1=j;
                size++;
            }else{     //数组已经满了
                if(A[j]==data[0] ||A[j]==data[1] && A[j]==A[j-1]){
                }else if(A[j]==data[0] ||A[j]==data[1] &&A[j]!=A[j-1]){
                    start1=j;
                }else{
                    int temp=data[1];
                    data[1]=A[j];
                    data[0]=temp;
                    start=start1;
                    start1=j;
                }
            }
            length=Math.max(length,j-start+1);
        }
        return length;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值