![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 67
云端潜行
A light heart lives long.
展开
-
判断字符数组中是否所有的字符都只出现过一次
// 要求:在保证额外空间复杂度为O(1)的前提下,使得时间复杂度最低 // 思路:先排序,再遍历数组 // 考点:各个排序算法的时间,空间复杂度——>堆排序 public boolean isUnique(char[] chas) { if (chas == null || chas.length == 0) { ...原创 2018-06-18 21:49:25 · 305 阅读 · 0 评论 -
添加最少字符使字符串整体都是回文字符串
public int[][] getDP(char[] str){ int[][] result = new int[str.length][str.length]; for(int i = str.length - 1; i >= 0; i--) { for(int j = i; j < str.length; j++) { ...原创 2018-06-18 20:58:02 · 933 阅读 · 0 评论 -
回文最小分割数
// 从后向前 public int myMinCut(String str) { if(str == null || str.length() == 0) return 0; char[] input = str.toCharArray(); int len = input.length; //记录了input[i~j...原创 2018-06-18 20:55:50 · 301 阅读 · 0 评论 -
BFS
Hint:图的邻接表存储:LinkedList<Integer> adj[] = new LinkedList[v];for (int i=0; i<v; ++i) adj[i] = new LinkedList();Java中QueueLinkedList<Integer> queue = new LinkedList<Integer>();代码实现——geeksforgeeksc原创 2018-05-04 21:59:07 · 108 阅读 · 0 评论 -
环检测——并查集
先描述思路,再列出我自己的算法实现,最后列出geeksforgeeks上的代码,进行比较分析思路在做并查集时,每次对节点i和节点j做合并时,分别会在parent数组中找到他们的根节点如果根节点不同,则做合并而如果指向同一个根节点,则意味着,存在环算法实现我的版本 int[] unionParent = new int[V]; int find(int node) {原创 2018-05-04 21:19:02 · 602 阅读 · 0 评论 -
LeetCode-4
4. Median of Two Sorted Arrayspublic double findMedianSortedArrays(int[] nums1, int[] nums2) { int len1 = nums1.length; int len2 = nums2.length; // 分治~二分查找 int low = 0;原创 2018-03-06 06:46:57 · 112 阅读 · 0 评论 -
LeetCode42. Trapping Rain Water
思路构建满足什么要求才会积水?必须存在一个左边界left,一个右边界right,且高度大于height[i]这里写图片描述需要明确对积水面积F[i]的定义: 以高度height[i]为底,存在比height[i]高的左右界,围成的面积对于图一,明显F[i]就是满足该定义的一块积水面积对于图二: - F[1] 满足,其左右边界分别为0,4 - F[2] 满足,其左右边界为1,3 - F[3原创 2018-03-10 19:53:33 · 147 阅读 · 0 评论 -
KMP时间复杂度分析
比较过程分析比较次数 比较次数: 红色 + 蓝色 蓝色部分是相比暴力求解,节省下的比较次数周期从比较次数可以看出,呈现 1 1 1 1 5 这样的周期一个周期内的比较次数:8周期长度:5周期个数:n/5比较总次数: 周期个数 * 一个周期内额比较次数 = 1.8n 一般化结论: - 一个周期内的比较次数:1 * (M - 1) + M - 周期长度:M - 周原创 2018-03-16 11:52:57 · 18685 阅读 · 0 评论 -
LeetCode20. Valid Parentheses
思路构思针对这个题目,先想几组input进行分析输入input (()) 在从左到右遍历过程中input[0]在遍历到它时,无法知道它会和后面哪一个括号匹配 因此需要把它先保存起来,但是如果存在一个右括号,它的匹配顺序又会是自右向左匹配的 因此可以得出结论,可以凭借栈来完成这项要求 ()() 针对这种匹配情况,上述思路也能满足 代码public bo原创 2018-03-10 10:50:08 · 112 阅读 · 0 评论 -
LeetCode32. Longest Valid Parentheses
思考构思首先针对括号匹配问题:借鉴LeetCode20那题的经验,我们可以想到借助栈,接下来就开始验证栈是否能解决该问题思路一考察第i位字符c如果c为左括号,把位置坐标i压栈如果c为右括号,对栈进行弹栈,得到index,i-index+1 就是匹配的长度验证对于(()),算法有效对于输入()(),算法无效需要针对第二种情况,重新构思思路二考察第i位字符c如果c为左括号,把位置坐标i原创 2018-03-10 10:47:56 · 109 阅读 · 0 评论 -
堆排序
本文基于普林斯顿大学的《算法》,在这里不描述算法本身,补充几个在使用该算法时需要注意的细节特点时间复杂度:O(2NlgN + 2N)空间复杂度:O(1)思路确定堆节点标号系统实现sink或者swim建堆利用 sink进行排序Note1:sink函数的声明 public void sink(char[] input, int n, in...原创 2018-08-07 11:08:21 · 125 阅读 · 0 评论