重拾数据结构(二)
来源:互联网 发布:淘宝客连接转换api 编辑:程序博客网 时间:2024/04/29 09:28
1.字符串:子串就是字符串中任意个连续的字符组成的子序列。例:有字符串String str = “abbbcdfee”,那么“a”,“ab”,"abb","bbb","cdf"等都是字符串str的子床,重点是连续“ac”由字符“a”与“c”组成,但是“ac”不是str的子串,另:“”也是str的子串,即str的有一个空子串,且空子串所有字符串的一个子串。
2,二分查找:
递归二分查找:
public int recursiveBinarySearch(int[] a, int target) { int hi = a.length - 1; int mid = hi/2; int middleValue = a[mid]; int[] tmp; if (target > middleValue) { tmp = Arrays.copyOfRange(a, mid + 1, hi); } else if (target < middleValue) { tmp = Arrays.copyOfRange(a, 0, mid - 1); } else { /** * 此处有问题middleValue转为整型对象Integer,虽然还是100,但是内存地址与Arrays.asList(a)中的100对象地址不一样,返回值会为-1 */ return Arrays.asList(a).indexOf(middleValue); } return recursiveBinarySearch(tmp, target);}此代码效率低下,同时会生成大量的中间数组,带改进。
常规二分查找:
public int binarySearch(int[] a, int target) { int lo = 0; int hi = a.length - 1; while (lo <= hi) { int mid = lo + ( hi - lo) /2; if (target < a[mid]) { hi = mid - 1; } else if (target > a[mid]) { lo = mid + 1; } else { return mid; } } return -1;}
这个方法是二分查找的正确姿势
追加正确姿势的递归二分查找:
public int recursiveBinarySearch(int[] a, int target, int start, int end) { int mid = start + (end - start) / 2; if (target > a[mid]) { return recursiveBinarySearch(a, target, mid + 1, end); } else if (target < a[mid]) { return recursiveBinarySearch(a, target, start, mid - 1); } else { return mid; }}
0 0
- 重拾数据结构(二)
- 重拾数据结构(一)
- 重拾数据结构:快排
- 重拾数据结构:简单排序
- 重拾数据结构:冒泡排序
- 重拾Java(二)
- 重拾Python 二
- 【重拾Effective Java】二
- 重拾python 二十
- 重拾python 二十一
- 重拾python 二十二
- 重拾python 二十四
- 重拾python 二十五
- 重拾python 二十六
- 重拾python 二十七
- 重拾python 二十八
- 重拾python 二十九
- 重拾springmvc(二)
- 工程目录问题
- CreateRemoteThread 失败,错误码5
- C# NX创建球体
- char、char*、char**数组
- Vuex 模块化与项目实例 (2.0)
- 重拾数据结构(二)
- HDU 6011 Lotus and Characters最大权值(单01背包)
- 哈弗曼树
- 杨辉三角递归
- strength
- 单例模式
- CryptoJS
- 剑指offer15——链表中倒数第k个节点
- Bootstrap 超大屏幕(Jumbotron)和页面标题