奈何最近未找到合适的记录软件,就暂时把自己的博客改造成学习笔记。由于出发点是供个人学习,可能层次不清,还望见谅。
目前的学习网站是leecode
https://leetcode-cn.com/leetbook/read/array-and-string/ybfut/
集合,列表和数组
集合:由一个或多个确定的元素所构成的整体。
{1. 集合里的元素类型不一定相同 2. 集合里的元素没有顺序 }
列表(线性列表):是一种数据项构成的有限序列,即按照一定的线性顺序,排列而成的数据项的集合。
列表最常见的表现形式有数组和链表,而栈和队列则是两种特殊类型的列表。
数组有一个非常重要的概念,索引
数组的操作
数组的四种操作: 读取元素, 查找元素, 插入元素, 删除元素
读取元素: 通过访问索引的方式来读取的,索引一般从0开始。计算机内存储数组会在一段**连续**的空间,并且会记下索引为0处的内存地址。
1.找到该数组的索引0的内存地址
2.将内存地址加上索引值。
时间复杂程度是常数级别,O(1)
查找元素
从头到尾O(N)
插入元素
挪一挪,腾地方
![元素插入数组的过程](https://img-blog.csdnimg.cn/202008051007571.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NhcnBlZGllbV9zaXN5,size_16,color_FFFFFF,t_70)
(链表可以解决这个问题)
删除元素
![删除元素,填补空缺](https://img-blog.csdnimg.cn/20200805100952943.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NhcnBlZGllbV9zaXN5,size_16,color_FFFFFF,t_70)
看一道题目:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
对于我自己的写法,那就是if else走天下,查到了一位小伙伴用二分法的java代码:
class Solution{
public int searchInsert(int[] nums, int target){