返回顶部
首页 > 资讯 > 后端开发 > Python >Java数组高频考点分析讲解
  • 537
分享到

Java数组高频考点分析讲解

2024-04-02 19:04:59 537人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录1、数组理论基础2、常见考点1.二分查找2.移除元素1、数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合,可以通过下标索引的方式获取到下标下对应的数据。 举个栗子(字

1、数组理论基础

数组是存放在连续内存空间上的相同类型数据的集合,可以通过下标索引的方式获取到下标下对应的数据。

举个栗子(字符数组)~

在这里插入图片描述

可以看到:

1、数组的下标从0开始

2、数组在内存中的地址是连续的

所以在删除元素时,只能用覆盖的方式进行。

例如,要删除下标为2的元素~ 就需要将从2之后的元素依次移到前一个,覆盖掉要删除的元素。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

所以删除元素并不是将该元素的空间释放了,而是将后面的元素移到前面,覆盖掉要删除的元素,然后将数组的长度减去1,就能得到一个看似新的数组。

在java中,二维数组的存储方式如下:

在这里插入图片描述

2、常见考点

1.二分查找

力扣题目链接: 二分查找

这道题目的前提是有序数组,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的,这些都是使用二分法的前提条件。

二分查找思想是:

数组有序的前提下(假设升序),如果数组中间的值大于要查找的值,那么要查找的元素就不可能在后半部分,因为后半部分的值都大于中间的值,所以通过第一次比较,就可以将范围缩小一半,后面同理,即时间复杂度降到了O(logN),效率大大提高,当题目中要求查找元素的时间复杂度为O(logN)时,首先想一想是否能用二分呢?

class Solution {
    public int search(int[] nums, int target) {
        // 避免当 target 小于nums[0] nums[nums.length - 1]时多次循环运算
        if (target < nums[0] || target > nums[nums.length - 1]) {
            return -1;
        }
        int left = 0, right = nums.length - 1;
        while (left <= right) {
            int mid = left + ((right - left) >> 1);
            if (nums[mid] == target)
                return mid;
            else if (nums[mid] < target)
                left = mid + 1;
            else if (nums[mid] > target)
                right = mid - 1;
        }
        return -1;
    }
}

2.移除元素

有的同学可能说了,多余的元素,删掉不就得了?但是要知道数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。

例如:给你一个数组和一个val值,要求删除数组中等于val值的元素,怎么做呢?

思路1:暴力法

我们可以使用两个for循环,当遍历到等于val值的元素时,就将后面的元素整体往前移一个覆盖掉要删除的元素,但是这种做法显然时间复杂度太高。

class Solution {
    public int removeElement(int[] nums, int val) {
        int size = nums.length;
        for (int i = 0; i < size;i++ ) {
            if (nums[i] == val) { // 发现需要移除的元素,就将数组后面集体向前移动一位
                for (int j = i + 1; j < size; j++) {
                    nums[j - 1] = nums[j];
                }
                i--; // 因为下标i以后的数值都向前移动了一位,所以i也向前移动一位
                size--;
            }
        }
        return size;
    }
}

思路2:双指针法

分别设设一个快慢指针,slow fast ,两者一起走,当慢指针遇到要删除的元素时停下,等待着被删除(覆盖);当快指针走到要被留下的元素时,将快指针的元素赋值给慢指针,然后两指针同时向后走,直到快指针遍历完整个数组。

可以这么理解:定义数组的新长度newLength ,从0开始,定义一个快指针遍历数组 fast,当fast走到要被留下的元素时,说明该元素应该被添加到新数组中(即被添加到newLength 下标,这里相当于 newLength 之前的部分数组看做要返回的新数组,相当于往这个新数组里插入元素)。

class Solution {
    public int removeElement(int[] nums, int val) {
        int fast = 0;// 定义一个快指针遍历数组
        int newLength = 0;// 定义新的数组长度
        while(fast < nums.length){
            if(nums[fast] != val){
                nums[newLength++] = nums[fast];
            }
            fast++;
        }
        return newLength;
    }
}

推荐力扣题目

1.删除排序数组中的重复项

2.移动零

3.比较含退格的字符串

4.有序数组的平方

其他常见数组的考点很多都是以这两点为基础,无非就是对数组增删改查,将数组的查找和删除掌握了,就可以开始刷题啦。

到此这篇关于Java 数组高频考点分析讲解的文章就介绍到这了,更多相关Java 数组内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java数组高频考点分析讲解

本文链接: https://lsjlt.com/news/144968.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java数组高频考点分析讲解
    目录1、数组理论基础2、常见考点1.二分查找2.移除元素1、数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合,可以通过下标索引的方式获取到下标下对应的数据。 举个栗子(字...
    99+
    2024-04-02
  • Java数组高频考点实例分析
    这篇文章主要介绍“Java数组高频考点实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java数组高频考点实例分析”文章能帮助大家解决问题。1、数组理论基础数组是存放在连续内存空间上的相同类型...
    99+
    2023-06-29
  • 【整理分享】75道前端面试CSS中的高频考点
    理论篇1. box-sizing 属性值有什么作用?用来控制元素的盒子模型的解析模式,默认为content-boxcontext-box:W3C 的标准盒子模型,设置元素的 height/width 属性指的是 content 部分的高/宽...
    99+
    2022-11-22
    css
  • Java二维数组讲解
    目录前言一、二维数组的应用场景二、二维数组的初始化 1.静态初始化1.静态初始化2.动态初始化三、二维数组的内存图1.特殊情况1的写法:特殊情况1的写法的好处:2.特殊情况2的写法四...
    99+
    2023-05-15
    Java二维数组 Java二维数组应用场景 Java二维数组初始化
  • 高考要来啦!用Python爬取历年高考数据并分析
    开发工具 **Python版本:**3.6.4 相关模块: pyecharts模块; 以及一些Python自带的模块。 环境搭建 安装Python并添加到环境变量,pip安装需要的相...
    99+
    2024-04-02
  • Java详细分析讲解HashMap
    目录1.HashMap数据结构2.HashMap特点3.HashMap中put方法流程java集合容器类分为Collection和Map两大类,Collection类的子接口有Set...
    99+
    2024-04-02
  • Java高频面试题之海量数据处理分析
    目录前言1.1 哈希算法1.2 位图法1.3 Bloom Filter1.4 数据库优化1.5 倒排索引法1.6 外排序法1.7 字典树2. 经典问题分析2.1 top k问题2.2...
    99+
    2022-11-13
    Java 海量数据处理 Java 数据处理
  • Java中数组分析
    Java中数组分析 先进行专栏介绍 数组声明和初始化一个数组方法一:声明数组并分配空间:可以使用以下语法声明一个数组,并指定数组的长度。举例 方法二:声明数组并初始化元素:可以在声明数组时,同时为数组的元素赋值。举例 ...
    99+
    2023-08-16
    java 开发语言
  • Java@GlobalLock注解详细分析讲解
    目录GlobalLock的作用全局锁为什么要使用GlobalLock工作原理GlobalLock的作用 对于某条数据进行更新操作,如果全局事务正在进行,当某个本地事务需要更新该数据时...
    99+
    2022-11-21
    Java @GlobalLock Java @GlobalLock注解
  • Java详细分析讲解泛型
    目录1.泛型概念2.泛型的使用2.1泛型类语法2.2泛型方法语法2.3泛型接口语法2.4泛型在main方法中的使用3.擦除机制4.泛型的上界5.通配符5.1通配符的上界5.2通配符的...
    99+
    2024-04-02
  • Python数据分析与处理(一)--北京高考分数线统计分析
    目录1.1 数据爬取1.2 最高分最低分统计1.3 一本二本理科差值统计1.4 2006—2019年近14年每科分数线的平均值统计前言: 为了帮助广大考生和家长了解高考历...
    99+
    2024-04-02
  • Java数组中Arrays.fill()方法讲解
    fill()方法共有两种参数类型,分别是: (1)Arrays.fill(int[] a,int value)            a :要进行替换元素的数组            value :替换的元素值 public class S...
    99+
    2023-09-08
    算法 java 数据结构
  • C++深入分析讲解函数与重载知识点
    目录函数的默认(缺省)参数1、默认参数的定义2、默认参数的注意点占位参数1、占位参数 函数内部无法使用2、占位参数 可以设置成缺省参数函数重载函数的默认(缺省)参数 1、默认参数的定...
    99+
    2024-04-02
  • Python中北京高考分数线统计的示例分析
    小编给大家分享一下Python中北京高考分数线统计的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言:为了帮助广大考生和家长了解高考历年的录取情况,很多...
    99+
    2023-06-22
  • 如何用Python分析2020高考分数和录取情况
    如何用Python分析2020高考分数和录取情况,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。“迟到”了一个月的高考终于要来了。正好我得到了一份山东新高考模拟考...
    99+
    2023-06-16
  • C++深入分析讲解类的知识点
    目录知识点引入类的初识1、封装2、权限3、类的定义(定义类型)4、类的成员函数与类中声明及类外定义Person类的设计设计立方体类点Point和圆Circle的关系知识点引入 C语言...
    99+
    2024-04-02
  • Java泛型与注解全面分析讲解
    目录1.什么是泛型2.为何使用泛型2.1.如何定义泛型2.2.通配符2.3.受限泛型2.4.泛型接口2.5.泛型方法3.java高级--注解3.1.预定义注解3.2.自定义注解(初级...
    99+
    2024-04-02
  • Java超详细分析讲解哈希表
    目录哈希表概念哈希函数的构造平均数取中法折叠法保留余数法哈希冲突问题以及解决方法开放地址法再哈希函数法公共溢出区法链式地址法哈希表的填充因子代码实现哈希函数添加数据删除数据判断哈希表...
    99+
    2024-04-02
  • Java深入分析讲解反射机制
    目录反射的概述获取Class对象的三种方式通过反射机制获取类的属性通过反射机制访问Java对象的属性反射机制与属性配置文件的配合使用资源绑定器配合使用样例通过反射机制获取类中方法通过...
    99+
    2024-04-02
  • java数组的示例分析
    这篇文章给大家分享的是有关java数组的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。java数组1) 声明形式:type[] arrayName; 推荐方式type a...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作