- q27 移除元素
题目描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
思考:移除所有数值等于val的元素,即碰到等于val的元素就将其删除,然后统计数组长度并输出
public int removeElement(int[] nums, int val) {
int len = nums.length;
//考虑特殊情况
if (len == 0) {
return 0;
}
int i = 0;
for (int j = 0; j < nums.length; ++j) {
//如果等于目标值,则删除
if (nums[j] == val) {
continue;
}
// 不等于目标值时,则赋值给num[i],i++
nums[i++] = nums[j];
}
return i;
}
- q485 最大连续1的个数
题目描述:给定一个二进制数组, 计算其中最大连续 1 的个数。
思考:计算最大连续1的个数,肯定需要遍历数组,然后还需要一个辅助变量统计数组中每段连续1的个数,遇到0将其保存下来,并与之前保存的数比较大小,大则更新,否则不更新,最后输出。
public int findMaxConsecutiveOnes(int[] nums) {
int length=nums.length;
int i=0;
int j=0;
for(int k=0;k<length;k++){
//如果数值等于1,就将i自增
if(nums[k]==1){
i++;
}else{
//否则的话,保存i和j之中的大值,令i=0,重新开始计数
j=Math.max(i,j);
i=0;
}
}
//最后输出两者之中的较大值
return Math.max(i,j);
}
- q66 加一
题目描述:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数0之外,这个整数不会以零开头。
思考:本题中可能要产生进位问题,具体来说,三种情况:一是个位上的数加一小于等于9,这种情况返回即可;二是连续好几位为9,加1势必要产生进位,直到遇到某位上数字不是9,进位停止。三是所有位置上都是9,这种情况直接定义新数组,长度为给定的数组加一,最高位为1,其余位为0,输出。
public int[] plusOne(int[] digits) {
int s=digits.length;
//从个位开始,加1并模10
for(int i=s-1;i>=0;i--){
digits[i]++;
digits[i]%=10;
//如果不等于0,直接输出
if(digits[i]!=0){
return digits;
}
}
//循环完毕,模10的值全部等于0;则直接定义新数组,最高位为1,其余为0,直接输出。
int[] arr = new int[s+1];
arr[0] = 1;
return arr;
}