牛课堂算法课
IFollowRivers
now is everything!
展开
-
第三季第一节课——题目1
1、已知一个字符串都是由左括号(和右括号)组成,判断该字符串是否是有效的括号组合。 例子: 有效的括号组合:()(),(()),(()()) 无效的括号组合:(,()),((),()(() 思路:略 2、题目进阶: 已知一个字符串都是由左括号(和右括号)组成,返回最长有效括号子串的长度。 进阶思路: 用一个数组dp来记录以当前字符结尾的最长有效括号子串的长度原创 2017-07-20 10:33:16 · 452 阅读 · 0 评论 -
第三季第一节课——题目3
有一排正数,玩家A和玩家B都可以看到。 每位玩家在拿走数字的时候,都只能从最左和最右的数中选择一个。 玩家A先拿,玩家B再拿,两人交替拿走所有的数字, 两人都力争自己拿到的数的总和比对方多。请返回最后获胜者的分数。 例如: 5,2,3,4 玩家A先拿,当前他只能拿走5或者4。 如果玩家A拿走5,那么剩下2,3,4。轮到玩家B,此时玩家B可以选择2或4中的一个,… 如果玩家A原创 2017-07-20 21:46:15 · 507 阅读 · 0 评论 -
第四章——最大连续子数组的和
维护两个变量:一个用于记录全局最大;一个用于记录当前最大 public class Problem_01_SubArrayMaxSum { public static int maxSum(int[] arr) { if (arr == null || arr.length == 0) { return 0; } int max = Integer.MIN_VALUE;原创 2017-08-10 09:17:57 · 282 阅读 · 0 评论 -
第四章——求最大子矩阵累加和
思路:遍历以每一行开始,其他行结束的子矩阵最大和。 而该子矩阵的最大和就是子矩阵每行元素相加得到的数组的最大子数组之和。 public class Problem_01_SubMatrixMaxSum { public static int maxSum(int[][] m) { if (m == null || m.length == 0 || m[0].length == 0) {原创 2017-08-10 09:38:13 · 531 阅读 · 0 评论 -
KMP算法——公共子串
public class Problem_02_KMPAlgorithm { //实际上这个函数用的是比KMP算法常数项更简单的算法 public static int getIndexOf(String s, String m) { if (s == null || m == null || m.length() < 1 || s.length() < m.length()) {原创 2017-08-06 21:40:30 · 713 阅读 · 0 评论 -
TopK问题——求数组中第K小的数
public class Problem_01_FindMinKNums { // O(N*logK) public static int[] getMinKNumsByHeap(int[] arr, int k) { if (k arr.length) { return arr; } int[] kHeap = new int[k]; for (int i = 0;原创 2017-08-06 21:44:13 · 583 阅读 · 0 评论