Java数组笔记

1. 理论基础

1.1 数组的toString方法是给出哈希值;

1.2 String.substring(a, b)截取String中a到b的部分;

1.3 数组在内存空间的地址是连续的,增删元素时,需要移动后面元素的地址;

1.4 数组的元素不能直接删除,可以覆盖;

1.5 m*n多维数组在内存中不是m*n的连续地址空间。

2. 经典思路

2.1 二分法

一般在有序数组查找中,常用二分法;

普通循环时间复杂度为O(n),二分法的时间复杂度为O(logn);

循环不变量原则:在循环中坚持对区间的定义。

2.2 双指针法

快慢指针法:通过一个快指针和慢指针在一个for循环下完成两个for循环的工作;

双for循环时间复杂度为O(n^2),快慢指针法时间复杂度为O(n);

左右指针法:通过一个左指针和右指针分别从首尾出发完成对数组的操作;

一般在数组改动中,使用双指针法。

2.3 滑动窗口法

根据当前窗口的情况,不断调节窗口的起始位置和结束位置,得到想要的一段结果;

一般用于查找长度最小的连续子串;

查找时,先右移右指针,直到找到符合条件的窗口,再右移左指针,直到找到恰好不符合条件的窗口,此时左右指针之间的窗口即为可能的子串,再与目前得到的最短子串比较,重复上述步骤更新长度最小的连续子串,直到指针遍历完数组。

2.4 模拟行为

例如顺时针输出矩阵,一般不涉及算法;

主要考察对代码的掌控能力,要注意到循环不变量原则,对于边界的判断要有严谨原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值