674.最长连续递增序列
原文链接:https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/
思路分析:
对于一个数组,将第一个元素于第二个元素对比,如果第二个元素大于第一个元素count加1,否则令count=1,从头计数;然后第二个元素与第三个元素对比,直至对比完整个数组。每次对比结束如果count至大于m,就将count赋给m,否则将m赋给m,保证m的值是最大的连续递增序列次数。考虑特殊情况数组为一个元素,没有元素时它的次数就是数组长度。
代码:
class Solution {
public int findLengthOfLCIS(int[] nums) {
if(nums.length==0||nums.length==1){
return nums.length;
}
int count=1;
int m=1;
for(int i=0;i<nums.length-1;i++){
if(nums[i]<nums[i+1]){
count++;
} else{
count=1;
}
m=count>m?count:m;
}
return m;
}
}
66.加一
原文链接:https://leetcode-cn.com/problems/plus-one/
思路分析:
对于数组来说将最后一个元素取出,然后加一。如果和为0~8则将这个和继续赋值给数组最后一个元素,如果为9,加1后为10向前进1。定义一个carry来控制是否进位,carry=1时循环继续,carry=0则结束循环。如果数组元素都为9则循环运行结束carry依旧=1,此时扩充数组,并令第一个元素为1即可。
代码:
class Solution {
public int[] plusOne(int[] digits) {
int carry=1;
for(int i=digits.length-1;i>=0;i--){
int num = digits[i] + carry;
digits[i]=num%10;
carry=num/10;
if(carry==0){
break;
}
}
if(carry==1){
int[] arr=new int[digits.length+1];
arr[0]=1;
return arr;
}
return digits;
}
}
724. 寻找数组的中心索引
原文链接:https://leetcode-cn.com/problems/find-pivot-index/
思路分析:
首先先对整个数组进行求和,结果赋值给sum。定义两个指针leftsum,rightsum。从左边开始对这个元素有sum减去这个元素左边元素的值为leftsum,rightsum的值为sum减去这个元素的值在减去leftsum。若leftsum=rightsum,则这个元素就是中间索引
代码:
class Solution {
public int pivotIndex(int[] nums) {
int sum=0;
for(int num:nums){
sum+=num;
}
int leftSum=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;
}
}
209.长度最小的子数组
原文链接:https://leetcode-cn.com/problems/minimum-size-subarray-sum/
思路分析:
对于数组 先从头开始进行元素求和,如果和大于等于给的s,这记录此时的这段数组长度,然后令和减去最左边元素的值。若和小于s是使此时的这段数组加以一个元素,也就是使和加上一个值直至和大于s时停止加入,然后将此时这段数组长度与之前相比记录最小的值,一直进行这些操作知道数组走完。
代码:
class Solution {
public int minSubArrayLen(int s, int[] nums) {
int len=0;
int i=0;
int sum=0;
for(int j=0;j<nums.length;j++){
sum+=nums[j];
while(sum>=s){
len=len==0?(j-i+1):Math.min(len,j-i+1);
sum-=nums[i];
i++;
}
}
return len;
}
}