一起学算法(数组篇)

news2024/9/20 18:00:17

1.概念:

1.顺序存储

       顺序存储结构,是指用一段地址连续的存储单元来依次存储结构,如图所示,每个蓝色方块都对应了数组中的一个数据,数据有类型,例如:32位整型int、单精度浮点型float、双精度浮点型double、字符型char、64位整型long long、64位短整型short等等。

 2.存储方式

       我们通常用一维数组来实现顺序存储结构,将第一个元素存储到索引为0的位置上,把第二个元素存储到索引为1的位置上,以此类推

int[]  num=new int[7]//声明长度为7的数组

我们也可以将数组中的元素事先初始化

int[] num={5,2,0,1,3,1,4};

 3.长度

       数组的长度是不可变的,只要被初始化长度就是固定了,int类型的数组默认初始化为0,boolean数组的默认初始化为false,其他的类型数组的初始值都是该值的默认值

4.数组中的索引

数组中的元素索引,我们可以用[]运算符来完成

int[] num={5,2,0,1,3,1,4};
int a=num[0];//5
int b=a[6];//4
int c=a[7]// 报错

       a[0]代表的是数组中的第一个元素,a[6]表示的是数组中的最后一个元素,而a[7]则是非法的,因为该数组中的元素的个数是7个。而最大索引值是6,所以a[7]会触发“下标越界的错误”。

5.数组的函数传参

       在学习函数的时候,我们知道,如果想将两个整型变量传递给参数,通过函数返回两个整型变量的和,比如:

public int add(int a,int b){
         return a+b;
}

       我们如果要求的是一个长度是10的数组中的所有元素所有和,我们应该如何通过函数来实现呢?例如:

public int add(int[] num){
  int sum=0;
  for(int i=0;i<num.length;i++){
      sum+=num[i];
      }
     return sum;
    }

       我们利用了一个for循环,将数组中的所有元素都取出来,然后累加到变量sum上,最后返回sum的值就ok了,这里需要知道num.length就是拿到该数组的长度,这一点是非常的关键的

2.题目分析

1.数组中的元素查找

假如给你一个数组num,让你去找到数组中是否包含targrt,如果是的话,返回其索引,没有的话直接返回-1

  public int find(int[] num,int target){
        int index=-1;
        for (int i = 0; i <num.length; i++) {
            if(num[i]==target){
                index=i;
            }
        }
        return index;
    }

做题步骤:

  • 如果没找到目标元素,返回-1,所以我们在初始化的时候直接给它初始化为-1
  • 遍历数组中的每个元素
  • 如果找到数组中的某个元素与target相等,则将其索引赋给index
  • 最后返回index

2.元素中的最小值查找

假如给你一个数组num,让你去找到数组中最小的值,返回最小值的索引(最大值计算过程相类似,判别条件变一变就行)

    public int findMin(int[] num,int target){
        int index=0;
        int min=0;
        for (int i = 0; i <num.length; i++) {
            if(num[i]<min){
                index=i;
                min=num[i];
            }
        }
        return index;
    }
  • 我们先假设数组中第一个元素是最小的
  • 开始遍历数组中的全部元素
  • 如果数组中的元素num[i]比min小,则更新min值以及对应的index值

leeetcode题单:

搜索旋转排序数组

class Solution {
    public int search(int[] nums, int target) {
    if(nums==null||nums.length==0){
        return -1;
    }

    int right=nums.length-1;
    int left=0;
    //二分查找
    while(left<=right){
        //查找中间值
        int mid=left+(right-left)/2;
        if(nums[mid]==target){
            return mid;}
        //中点大于目标值,在数组的右边
        if(nums[mid]<nums[right]){

             if(target>nums[mid]&&target<=nums[right]){
                 left=mid+1;
                 //在数组的左边
             }else{
                 right=mid-1;
             }
             //目标值在左边
        }else{
            if(target>=nums[left]&&target<nums[mid]){
                right=mid-1;
            }else{
                left=mid+1;
            }
        }
    }
   return -1;
    }
}

拿硬币

class Solution {
      public int minCount(int[] coins) {
     if(coins==null||coins.length==0){
         return 0;
     }
     int count=0;
        for (int i = 0; i <coins.length; i++) {
            count+=(coins[i]&1)==0?(coins[i]/2):((coins[i]/2)+1);
        }
        return count;
    }
}

寻找旋转排序数组中的最小值

class Solution {
    public int findMin(int[] nums) {
      //对入参进行判断
        if(nums==null||nums.length==0){
            return 0;
        }
        int n=nums.length;
        int left=0;
        int right=n-1;
        while(left<right){
            int mid=left+(right-left)/2;
            //最小值永远在无序的那一边,左大于右
            if(nums[mid]>nums[right]){
                left=mid+1;
            }else{
                right=mid;
            }
        }
        return nums[left];
    }
}

山峰数组的顶部

class Solution {
    public int peakIndexInMountainArray(int[] num) {
     int max=num[0];
     int maxIndex=0;
     for(int i=0;i<num.length;i++){
         if(num[i]>max){
             max=num[i];
             maxIndex=i;
         }
     }
     return maxIndex;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/821834.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你知道HTTP与HTTPS有什么区别吗?

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、什么是HTTP&#xff1f; 二、什么是HTTPS&#xff1f; 三、HTTPS 的工作原理 1、客户端发起 HTTPS 请求 2、服务端的配置 3、…

如何设计一个Android端高性能日志监控系统

开发中客户端经常遇到一些线上问题, 无法复现, 但是又的的确确存在; 当线上反馈的时候无从下手; 主要是因为并不知道用户所处的环境,以及所做的操作顺序或者程序运行的顺序; 在排查问题和复现问题上占用了很大的成本; 如果debug时的log日志如果线上也能查看就好了; 基于此, 我们…

5.类型推论,类型断言,类型兼容性

目录 1 类型推论 2 类型断言 2.1 类型推论所带来的问题 2.2 基本使用 2.3 不断言会出现的问题 2.4 断言的另一种写法 2.5 查看DOM元素的类型 3 类型兼容性 3.1 类兼容性 3.2 接口兼容性 3.2.1 接口之间的兼容性 3.2.2 接口与类之间的兼容性 3.3 函数…

C++ 类的静态成员

在结构化程序设计中程序模块的基本单位是函数&#xff0c;因此模块间对内存中数据的共享是通过函数与和函数之间的数据共享来实现的&#xff0c;其中包括两个途径——参数传递和全局变量。 面向对象的程序设计方法兼顾数据的共享和保护&#xff0c;将数据与操作数据的函数封装…

解决运行flutter doctor --android-licenses时报错

问题描述&#xff1a; 配置flutter环境时&#xff0c;会使用flutter doctor命令来检查运行flutter的相关依赖是否配好。能看到还差 Android license status unknown.未解决。 C:\Users\ipkiss.wu>flutter doctor Flutter assets will be downloaded from https://storage.…

【MySQL】数据库的增删查改+备份与恢复

文章目录 一、创建数据库create二、数据库所使用的编码2.1 查询字符集和校验集2.2 指定编码创建数据库2.3 不同的校验集对比 三、删除数据库drop四、查看数据库show五、修改数据库alter六、数据库的备份与恢复6.1 备份 mysqldump6.2 恢复source6.3 仅备份几张表或备份多个数据库…

互联网宠物医院开发:宠物健康护航的新选择

随着人们对宠物的关注度逐渐提高&#xff0c;宠物医疗服务也得到了更多的关注和需求。而互联网宠物医院作为一种新兴的医疗服务形式&#xff0c;正以其独特的优势和便捷性受到越来越多宠物主人的青睐。   首先&#xff0c;互联网宠物医院的最大优势在于提供了便捷的服务。宠物…

寻找峰值——力扣162

文章目录 题目描述法一 寻找最大值法二 二分法 题目描述 法一 寻找最大值 int findPeakElement(vector<int>& nums){return max_element(nums.begin(), nums.end()) - nums.begin();}法二 二分法 int findPeakElement(vector<int>& nums) {int l 0, r n…

onnx模型的保存与使用

1 onnx模型的保存 在网络训练结束之后&#xff0c;通常会将模型的权重参数保存到.pth或.pt文件中&#xff0c;如果部署环境中有pytorch&#xff0c;那么直接新建一个模型类对象&#xff0c;然后导入权重参数即可&#xff0c;但如果部署环境中只有OpenCV&#xff0c;没有pytorc…

融合大数据、物联网和人工智能的智慧校园云平台源码 智慧学校源码

电子班牌系统用以展示各个班级的考勤信息、授课信息、精品课程、德育宣传、班级荣誉、校园电视台、考场信息、校园通知、班级风采&#xff0c;是智慧校园和智慧教室的对外呈现窗口&#xff0c;也是学校校园文化宣传和各种信息展示的重要载体。将大数据、物联网和人工智能等新兴…

27岁到来之际,我在阿里实现了年薪30W+的小目标

毕业快 5 年了&#xff0c;每当和人聊起自己的职场飞升之路&#xff0c;都不由得感激当初果断逃离舒适圈的自己。出身一所非 211、985 院校&#xff0c;毕业后入职了一家小型互联网公司&#xff0c;当着普普通通的初级测试工程师&#xff0c;工作期间虽然也时常遇到挑战&#x…

性能优化点

Arts and Sciences - Computer Science | myUSF 索引3层&#xff08;高度为3&#xff09;一般对于数据库地址千万级别的表 大于2000万的数据进行分库分表存储 JVM整体结构及内存模型 JVM调优&#xff1a;主要为减少FULL GC的执行次数或者减少FULL GC执行时间 Spring Boot程序…

在线文档管理工具都有什么值得推荐的?

在线文档管理工具是现代企业和个人必备的工具之一&#xff0c;它们可以帮助用户方便地创建、编辑、共享和管理文档。 几个值得推荐的在线文档管理工具&#xff1a; Google 文档&#xff1a;Google 文档是一款免费的在线文档工具&#xff0c;它提供了和 Microsoft Word 类似的…

微信公众号开发学习

申请测试号 地址 通过F12抓取体验接口权限表的HTML 解析HTML 引入pom <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><…

物联网|可变参数的使用技巧|不一样的点灯实验|访问外设的寄存器|操作寄存器实现点灯|硬件编程的基本流程-学习笔记(11)

文章目录 可变参数的使用技巧第三阶段-初级实验Lesson5:不一样的点灯实验---学习I/O的输出 ☆点灯的电路图分析1 一起看看点灯的电路图Tip1:另一种点灯的电路Tip1:如何访问外设的寄存器2 STM32F407中操作GPIO的方法 通过直接操作寄存器实现点灯实验Tip1:硬件编程的基本流程 2代…

数据可视化(4)散点图及面积图

1.简单散点图 #散点图 #scatter(x,y) x数据&#xff0c;y数据 x[i for i in range(10)] y[random.randint(1,10) for i in range(10)] plt.scatter(x,y) plt.show()2.散点图分析 #分析广告支出与销售收入相关性 dfcarpd.read_excel(广告支出.xlsx) dfdatapd.read_excel(销售…

VS开发Qt程序,无法打印QDebug调试信息,VS进行Qt开发时Qt Designer无法使用“转到槽”选项

VS开发Qt程序&#xff0c;无法打印QDebug调试信息&#xff0c;VS进行Qt开发时Qt Designer无法使用“转到槽”选项 VS开发Qt程序&#xff0c;无法打印QDebug调试信息VS进行Qt开发时Qt Designer无法使用“转到槽”选项 VS开发Qt程序&#xff0c;无法打印QDebug调试信息 解决方案…

使用Idea提交项目到远程仓库

使用Idea提交项目到远程仓库 1.在Idea中打开本地要推送的项目2.创建远程仓库并提交 1.在Idea中打开本地要推送的项目 tips: 首先你得有git工具&#xff0c;没有的话可以参考下面的这篇文章 git与gitee结合使用&#xff0c;提交代码&#xff0c;文件到远程仓库 从导航栏中选择 V…

如何快速开拓海外华人市场?附解决方案!

开拓华人市场对于企业来说是非常必要的。华人市场庞大且潜力巨大&#xff0c;拥有巨额的消费能力。随着华人经济的不断增长&#xff0c;越来越多的企业开始意识到华人市场的重要性。 通过开拓华人市场&#xff0c;企业可以获得更多的销售机会&#xff0c;并且在竞争激烈的市场…

Go语言time库,时间和日期相关的操作方法

time库 用于处理时间、日期和时区的核心库。在实际开发中&#xff0c;常常需要与时间打交道&#xff0c;例如记录日志、处理时间差、计算时间间隔等等。因此&#xff0c;掌握time库的使用方法对于Go开发者来说非常重要。 在Go语言中&#xff0c;时间表示为time.Time类型&…