ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-03-10 03:00:07  阅读:115  来源: 互联网

标签:arr val nums int 元素 笔记 数组 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;
}
}

标签:arr,val,nums,int,元素,笔记,数组,leetcode,刷题
来源: https://www.cnblogs.com/taoshaoji/p/15987851.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有