C/C++教程

leetcode 刷题笔记(简单题)数组篇

本文主要是介绍leetcode 刷题笔记(简单题)数组篇,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

数组

常用操作

//初始化数组
int[] a = {1,2,3};
int[] b = new int[]{1,2,3};
Arrays.toString(b);//输出数组
int[] c = new int[3];//指定数组长度
//新建 ArrayList 对象
ArrayList<Integer> arr = new ArrayList<>();
arr.add(1);//添加元素 O(1)
arr.add(3,99);//向下标为3的位置添加99这个元素 时间复杂度:O(n)
arr.get(1);//获取数组下标为1的元素 时间复杂度:O(1)
arr.set(1,11);//将数组下标为1 的元素改为99 时间复杂度:O(1)
arr.remove(3);//删除数组元素为3的元素 时间复杂度:O(n)
int cSize = c.length;//数组长度
int arrSize = arr.size();// O(n)

485. 最大连续 1 的个数

给定一个二进制数组 nums , 计算其中最大连续 1 的个数。

示例 1:

输入:nums = [1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.
示例 2:
输入:nums = [1,0,1,1,0,1]
输出:2
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int count =0;//用来计算数量
int result = 0;
if(nums==null || nums.length ==0){//边界值判定
return 0;
}
for(int i = 0;i<nums.length ;i++){ //遍历数组
if(nums[i]==1){//如果等于 1 count +1
count+=1;
}else{
result = Math.max(result,count);//当不等于 1 时,判断当前 1 的数量是否比上一次大
count = 0;//下一次循环重新计数
}
}
return Math.max(result,count);

}
}

283. 移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]

题解:

class Solution {
public void moveZeroes(int[] nums) {
int index = 0;
for(int i=0;i<nums.length;i++){//遍历数组
if(nums[i]!=0){ //如果不等于 0
nums[index]=nums[i]; //将此时的元素移动到 [index]的位置
index++;
}
}
for(int j =index;j<nums.length;j++){ //最后补0
nums[j]=0;
}
}
}

27. 移除元素(双指针法)

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1:

输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

示例 2:

输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3]
解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。
class Solution {
public int removeElement(int[] nums, int val) {
int left = 0; //左指针
int right = nums.length;//右指针
while (left < right) { //两个指针没重合时
if (nums[left] == val) { //当左指针元素等于 val时
nums[left] = nums[right - 1]; //把右指针元素的值覆盖左指针
right--;//右指针向左移动
} else {
left++; //不等于val 时左指针向右移动
}
}
return left;
}
}
这篇关于leetcode 刷题笔记(简单题)数组篇的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!