1. 二分查找
输入有序序列(数组),一个数(找的数)
package MySearch;
public class BinarySearchDemo {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9,11};
int res = binarySearch(arr, 11);
System.out.println(res);
}
public static int binarySearch(int[] arr, int x){
int left = 0;
int right = arr.length - 1;
while (left<=right) {
int mid = (right+left)/2; // important
if (arr[mid] == x) {
return mid;
}
if (x < mid){
right = mid-1;
}
if (x>mid){
left = mid+1;
}
}
// 还没有找到
return -1;
}
}
2. 旅行商问题
时间复杂度 = O(n!)
3. 选择排序
选择最小(大),加入新数组。
4. 分治法
5. NP完全问题
如何判断是不是NP完全问题
1. 元素较少时候,运行速度快,元素数量增加,速度变得很慢
2. 涉及所有组合问题
3. 不能把问题划分成小问题,必须考虑所有情况
4. 涉及序列(旅行商问题)
5. 涉及集合(集合覆盖问题)
6. 可以转换成4,5两种的问题
6. 贪心和动态规划
贪心背包问题:可以拿一部分,如一袋米价值100/1g,共20g,可以考虑拿一部分如5g
DP背包问题:只能选择拿或者不拿,不能只拿一部分
具体参考算法图解书籍。
7. 最长公共子串,最长公共子序列
参考书籍
本文介绍了二分查找算法在有序数组中的应用,探讨了其时间复杂度,并与旅行商问题进行对比,同时涵盖了选择排序和分治法的基本概念。讨论了如何识别NP完全问题,以及贪心与动态规划在背包问题中的区别,最后涉及最长公共子串和子序列的算法详解。
https://blog.csdn.net/weixin_43891234/article/details/121014855?spm=1001.2014.3001.5501

被折叠的 条评论
为什么被折叠?



