Leetcode 数组专项

https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/

674. 最长连续递增序列

class Solution {

    public int findLengthOfLCIS(int[] nums) {

        if(nums.length == 0||nums.length == 1){    //特殊当数组长度为0或者1时返回他们的长度即可

            return nums.length;

        }

            int count = 1;                                          //临时统计最长序列

            int maxCount = 1;                                 //统计最长递增序列

            for (int i=0;i<nums.length-1;i++){         //遍历数组

                if (nums[i]<nums[i+1]){                   //对数组递增进行比较

                    count++;                                    //如果大于前一个数则count加一

                }else{

                    count = 1;                      

                } 

                maxCount =count>maxCount?count:maxCount;       //比较输出最长连续递增数

              

            }

            return maxCount;

        }

}

https://leetcode-cn.com/problems/find-pivot-index/ 

724. 寻找数组的中心索引

右边和=总和-中心索引值-左边一次加的总和(判断)

class Solution {
    public int pivotIndex(int[] nums) {
        int sum=0;
        for(int num:nums){                               //运用foreach循环只记录来算出总和
            sum+=num;
        }
        int leftSum=0;                                        //左边和与右边设立初始值0
        int rightSum=0;
        for(int i=0;i<nums.length;i++){              //遍历数组
            if(i==0){                                            
                leftSum=0;
            }else{
                leftSum+=nums[i-1];                    //左边累加数字
            }
            rightSum=sum-nums[i]-leftSum;     //右边和=总和-中心索引值-左边一次加的总和(判断)
            if(rightSum==leftSum){                 //判读左右两值是否相等
                return i;
            }
        }
        return -1;
    }
}

https://leetcode-cn.com/problems/sort-array-by-parity/

905. 按奇偶排序数组

我们可以排序来实现,但时间复杂度高,所以我们对他左右奇偶性进行判断,然后进行交换

class Solution {
    public int[] sortArrayByParity(int[] A) {                              //相当于双指针
        int left=0;                                                                       //左边从0开始
        int right = A.length -1                           ;
        while(left < right){                                                        //结束条件
            if(A[left]%2 == 1&&A[right]%2 == 0){                      //如果左奇右偶那就交换
                int temp = A[left];
                A[left] = A[right];
                A[right]=temp;
            }else if(A[left]%2==0&&A[right]%2==1){               //如果左偶右奇左边继续向后右边继续向前
                left++;
                right--;
            }else if(A[left]%2==0&&A[right]%2==0){               //如果左偶右偶左边向后找右边不懂等着交换
                left++; 
            }else{
                right--;                                                            //如果就是左奇右奇右边减减找偶数
            }
        }
        return A;
    }
}

https://leetcode-cn.com/problems/partition-array-into-three-parts-with-equal-sum/

1013. 将数组分成和相等的三个部分

数组总和除以三就是每个相等部分的和利用这个值统计是否到达三次即可

class Solution {
    public boolean canThreePartsEqualSum(int[] A) {
        int sum=0;
        for(int num:A){                       //用foreach  来统计数组值和
            sum+=num;
        }
        int key=sum/3;                     //计算出三分之一的总和
        int group=0;
        for(int i=0;i<A.length;i++){     //遍历数组
            key-=A[i];                           
            if(key==0){                      //一直减到key等于0
                group++;
                key=sum/3;              //给key从新赋值
            }
        }  
        return group==3;             //判断
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值