leetBook数组和字符串总结---数组

概述:数组是数据结构中的基本模块之一。因为,字符串是由字符数组形成的,所以二者是相似的。

A  集合,列表和数组

1,集合

定义:由一个或多个确定的元素所构成的整体。

特点:集合内元素类型不一定相同。无序。

2,列表

定义:又称为线性列表,是具有相同数据元素的一个有序序列。

特点:有穷性,元素的个数是有限的。一致性,元素性质相同。序列性,元素之间的相对位置是线性的。

存储方式:连续存储,顺序表。非连续存储,链表。

常见表现形式:数组类型实现顺序表。链表。

3,数组

数据类型:列表的表现形式之一

特点:有序。与列表的区别,数组有索引,数组的存储是连续的

数组的四种操作:

1,读取元素:通过索引方式读取。时间复杂度O(1)。

2,查找元素:已知索引,时间复杂度O(1)。未知索引,时间复杂度O(N)。

3,插入元素:末尾插入,时间复杂度O(1)。中间插入,时间复杂度O(N)。

4,删除元素:时间复杂度O(N)。

习题1:

寻找数组的中心索引
给你一个整数数组 nums ,请计算数组的 中心下标 。

数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。

如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。

如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。

      

先求得数组中所有元素之和sum;
遍历数组,取当前下标左边的元素之和leftNum,同时sum减去已遍历元素,比较二者是否相等,相等则返回当前下标;
遍历结束,代表没有中心索引,返回-1;注:借鉴了一位大佬的代码

习题二:

搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

      

习题三

合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

    public static int[][] merge(int[][] intervals) {
        if (intervals.length == 0) return intervals;
        Arrays.sort(intervals, Comparator.comparingInt(a -> a[0]));//按每行的第0列升序排序
        Vector<int[]> integerVector;//由于我们事先不知道数组大小,所以用Vector类实现动态数组。
        integerVector = new Vector<>();
        int[] ints = intervals[0];//定义一个Int类型数组用于作比较,默认值为第一组二维数组的值。
        for (int i = 1; i < intervals.length; i++) {//循环这个二维数组
            if (ints[1] >= intervals[i][0]) {//如果第一个数组的右端点大于等于下一个数组的左端点,做说明两个数组有所交集。
                ints[1] = Math.max(ints[1], intervals[i][1]);//int类型数组的右端点等于两个数组中右端点大的那个值。
            } else {
                integerVector.add(ints);//把int类型一维数组ints添加到我们创建的vector类里面。
                ints = intervals[i];//给一维数组重新赋值。
            }
        }
        integerVector.add(ints);//把最后一个区间添加到Vector里面
        return integerVector.toArray(new int[integerVector.size()][2]);//把vector转换成二维数组返回。
    }

作者:陈陈陈晨晨
链接:https://leetcode.cn/leetbook/read/array-and-string/c5tv3/?discussion=pJ59b3
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值