当前位置: 首页 > news >正文

力扣刷题篇之【数组篇】

✨hello,愿意点进来的小伙伴们,你们好呐!
✨ 🐻🐻系列专栏:【力扣刷题篇】
🐲🐲本篇内容:数组刷题篇
🐯🐯作者简介:一名现大二的三非编程小白

    • 1. 找到数组的中间元素
    • 2. 合并区间
    • 3. 0矩阵

1. 找到数组的中间元素

链接: 找到数组的中间元素

在这里插入图片描述

思路:
我们可以定义一个变量 sum 将数组所有的元素累加起来,然后再继续重新遍历一遍数组,
定义变量 leftSum 来存储从下标 j 之前的元素的总和,这样子的话,下标 j 后面的元素的总和就等于 sum - leftSum - num【j】,当下标 j 左右的元素和相同时,leftSum * 2 + num【j】 == sum,所以我们可以依靠该公式来判断是否相等

class Solution {
    public int findMiddleIndex(int[] nums) {
        int sum = 0;
        for(int i = 0;i < nums.length;i++){
            sum += nums[i];
        }
        int leftSum = 0;
        for(int j = 0; j < nums.length;j++){
            if(2 * leftSum + nums[j] == sum){
                return j;
            }
            leftSum += nums[j];
        }
        return -1;
    }
}

2. 合并区间

链接: 合并区间
在这里插入图片描述
思路:
我们先判断该二维数组长度是否为0,是则返回一个null数组。
然后将二维数组进行排序,new 一个顺序表 ArrayList来存储正确格式的数组。
在 for 循环中遍历二维数组中所有的一维数组,将每个数组的起始数和结束值,记录下来,如果顺序表的大小为0或者数组符合要求的话,就直接往顺序表尾插入该数组,若不符合要求的话,就修改顺序表最尾的元素的结束值,修改为:当前的顺序表最尾的元素的结束值与下标为 i 的数组的结束值的最大值,最后将顺序表转成二维数组返回

class Solution {
    public int[][] merge(int[][] intervals) {
        if(intervals.length == 0){
            return new int[0][2];
        }

        Arrays.sort(intervals,new Comparator<int[]>(){
            public int compare(int[] intervals1,int[] intervals2){
                return intervals1[0] - intervals2[0];
            }
        });

        List<int[]> list = new ArrayList();
        for(int i = 0; i < intervals.length;i++){
            int L = intervals[i][0];
            int R = intervals[i][1];
            if(list.size() == 0 || list.get(list.size() - 1)[1] < L){
                list.add(new int[]{L,R});
            }else{
                list.get(list.size() - 1)[1] = Math.max(list.get(list.size() - 1)[1],R);
            }
        }
        return list.toArray(new int[list.size()][]);
    }
}

3. 0矩阵

链接: 0矩阵
在这里插入图片描述
思路:
这道题我们可以用标记数组的思路,定义两个布尔类型的变量数组来记录清0 的行与列,然后再嵌套循环将数组内的元素清 0。

class Solution {
    public void setZeroes(int[][] matrix) {
        int len1 = matrix.length;
        int len2 = matrix[0].length;
        boolean[] row = new boolean[len2];
        boolean[] col = new boolean[len1];

        for(int i = 0;i < len1;i++){
            for(int j = 0;j < len2;j++){
                if(matrix[i][j] == 0){
                    row[j] = col[i] = true;
                }
            }
        }

        for(int i = 0;i < len1;i++){
            for(int j = 0;j < len2;j++){
                if(row[j] == true || col[i] == true){
                    matrix[i][j] = 0;
                }
            }
        }
    }
}

相关文章:

  • 【opencv-c++】图像像素的逻辑操作
  • Jupyter Notebook 远程连接服务器 (mac os)
  • 中国电信5G技术承载网络
  • 【程序填空】表达式计算(栈应用)C++
  • 朴素贝叶斯关于naivebayes包核函数等
  • 泛型的详解
  • 数据填报系统可有效解决业务部门哪些问题?_光点科技
  • 【Web基础】FilterListener
  • 【数模】数模入门与常用算法汇总
  • 【深度学习100例】—— 使用pytorch实现LSTM自动AI作诗(藏头诗和首句续写)| 第6例
  • Linux的开发工具
  • Cadence Allegro Vertex功能介绍使用方法Vertex与Slide的区别图文教程
  • Qt5开发从入门到精通——第九篇六节( Qt5 文件及磁盘处理—— 监视文件和目录变化)
  • 接收节点无线广播发送的数据,并printf打印出来(含核心代码)_物联网挑战赛第四届第一题
  • 【CSDN:国庆活动】——“问答”里的成长记录
  • Android Studio:GIT提交项目到远程仓库
  • CentOS 7 防火墙操作
  • docker容器内的网络抓包
  • github指令
  • Java反射-动态类加载和重新加载
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Mysql数据库的条件查询语句
  • php面试题 汇集2
  • python学习笔记-类对象的信息
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Terraform入门 - 3. 变更基础设施
  • Twitter赢在开放,三年创造奇迹
  • vuex 学习笔记 01
  • webgl (原生)基础入门指南【一】
  • 创建一种深思熟虑的文化
  • 大型网站性能监测、分析与优化常见问题QA
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 线性表及其算法(java实现)
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 在weex里面使用chart图表
  • ionic入门之数据绑定显示-1
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (Matlab)使用竞争神经网络实现数据聚类
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (简单) HDU 2612 Find a way,BFS。
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (五)Python 垃圾回收机制
  • (一)认识微服务
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...