Leetcode 数组专项

别来无恙 提交于 2020-02-24 06:47:15

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;             //判断
    }
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!