算法
文章平均质量分 57
hello_bravo_
这个作者很懒,什么都没留下…
展开
-
67--71 二分查找
67 查找插入位置力扣https://leetcode-cn.com/problems/N6YdxV/func searchInsert(nums []int, target int) int { start:=0 end:=len(nums)-1 for start<=end{ mid:=(start+end)/2 if nums[mid]==target{ return mid }else if nums[mid] >target{ //target在原创 2021-12-05 18:02:08 · 128 阅读 · 0 评论 -
六十六--67 单调栈
66 直方图最大矩形面具力扣https://leetcode-cn.com/problems/0ynMMM///采用单调栈的思路,栈内数字必须单调递增func largestRectangleArea(heights []int) int { var res int stack:=[]int{} //用于解决边界问题,当只有一个长度的heights传入,不用做特殊处理 heights = append(heights,0) //-1的目的是可以将栈内遗留的值全部排出原创 2021-12-05 15:15:32 · 274 阅读 · 0 评论 -
每日一练 55--58 滑动窗口
55力扣https://leetcode-cn.com/problems/M1oyTv/思路最短子字符串,没有要求连续,最重要的就是要搞定滑动窗口的定义func minWindow(s string, t string) string { n := len(s) var cntS [128]int var cntT [128]int var cnt int res := s + "#" //获取t字符串字符的数目 for _, c := range t { cntS原创 2021-11-17 09:17:08 · 3335 阅读 · 0 评论 -
每日一练 52--54 滑动窗口
连续字符字串,遇到连续子串先想滑动窗口52力扣https://leetcode-cn.com/problems/MPnaiL/给定两个字符串s1和s2,写一个函数来判断s2是否包含s1的某个变位词。换句话说,第一个字符串的排列之一是第二个字符串的子串。func checkInclusion(s1 string, s2 string) bool { var start,end int plength:=len(s1) slength:=len(s2) need...原创 2021-11-09 22:58:57 · 4143 阅读 · 0 评论 -
每一日练 43--51 前缀和
43力扣https://leetcode-cn.com/problems/WGki4K/给你一个整数数组nums,除某个元素仅出现一次外,其余每个元素都恰出现三次 。请你找出并返回那个只出现了一次的元素。思路:可以使用map,也可以使用位数,一定出现三次会导致位一定被3整除,剩下的就是多余的值func singleNumber(nums []int) int { nummap:=make(map[int]int) for i:=0;i<len(nums);i++{...原创 2021-11-07 23:26:06 · 4024 阅读 · 0 评论 -
每日一练--39玩具套圈
//计算位置x1,y1半径r1的玩具是否在x2,y2处半径位r2的圆圈内func canGetToy(x1, y1, r1, x2, y2, r2 int) bool { //两圆圆心连线距离 length := math.Sqrt(float64((x2-x1)*(x2-x1)) + float64((y1-y2)*(y1-y2))) return length+float64(r1) <= float64(r2)}//套圈游戏func circleGame(toys [][]in.原创 2021-09-15 23:15:16 · 135 阅读 · 0 评论 -
动态规划学习总结:golang
动态规划https://blog.csdn.net/qq_41785863/article/details/81457126动态规划0:1背包:import ( "fmt")func main() { var n,v int //n for number //v for package fmt.Scanf("%d %d",&n,&v) w:=make(...原创 2019-06-15 10:55:20 · 494 阅读 · 0 评论 -
Strassen矩阵算法的实现
仅仅针对2的幂次数阶的矩阵,时间复杂度O(n^lg7)#include <iostream>using namespace std;void gerResultStrassen(int **arr, int **brr, int n, int **crr){ if (n == 1) { crr[0][0] += arr[0][0] * brr[0][0];原创 2017-05-30 20:37:53 · 623 阅读 · 0 评论 -
01背包算法
核心思想: 知道背包的容量C,知道物品数量N,和物品的价值V[N+1]重量W[N+1],创建一个二阶矩阵m[N+1][C+1],其中第一行第一列不用,因为他的下标保证和i个物品一致 第一步:那么先从最后一个物品看一个一个看 容量从1~C开始看 如果最后一个物品能放入背包,就把它放进去,不能装的时候m[N][i]都是0,能装的时候就是最后一个物品价值的值 第二步:开始查看倒数第二个物品 当原创 2016-10-26 11:32:29 · 585 阅读 · 0 评论 -
矩阵连乘--动态规划算法
动态规划(之前的背包问题也是动态规划的一种) 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。 与分治法不同的是:适用于动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。 目的:保存已解决的子文题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,从而得到多项式时间的算法。 基本思路:用一个原创 2016-10-29 16:09:32 · 6410 阅读 · 0 评论 -
棋盘覆盖算法
题目介绍 在一个(2^k)*(2^k)个方格组成的棋盘中,若恰有一个方格与其他方格不同,则称该方格为特殊方格。 所以有4^k的次方中不同的特殊棋盘。 在棋盘覆盖中我们有四种L型骨牌,要求是使用这些骨牌,覆盖完全棋盘上除特殊位置以外的所有位置,并且任何两个L型骨牌不得重叠覆盖。 在任何一个(2^k)*(2^k)的棋盘覆盖中,用到的L型骨牌个数恰为(4^k-1)/3。思路如下: 采用分治的思想原创 2016-10-27 20:24:06 · 1982 阅读 · 2 评论 -
算法(6):分支限界法
我也在学习中,会尝试一下解决所有问题,所以不定期会更改文章,如果有好的思路的欢迎讨论分支限界法的解题思路:分支限界法类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。区别:回溯法求解目标是找出T中满足约束条件的所有解,分支限界法的求解目标是找出满足约束条件的一个解。回溯法是深度优先的方式搜索解空间树T而分支限界法师广度优先搜索策略:(1)在原创 2016-08-25 10:59:25 · 1425 阅读 · 0 评论 -
算法:分治总结
分治法的基本思想:把一个规模为n的问题分解为k个规模较小的自问题,这些子问题互相独立且与原问题相同。 一般的算法设计模式: Divide-and-Conquer(P){ if(|P| Adhoc(P); divide P into smaller subinstances P1,P2,...,Pk; for(int i = 1;i yi = Di原创 2016-08-16 11:01:06 · 598 阅读 · 0 评论 -
算法:动态规划总结
动态规划和分治的区别:动态规划的子问题不相互独立,分治的子问题相互独立因为动态规划的子问题相互影响,所以为了避免大量的重复计算,我们可以用一个表来记录所有已经解决的问题。设计动态规划算法的步骤:(1)找出最优解的性质,并刻画其结构特征。(2)递归地定义最优值(3)以自底向上的方式计算出最优值(4)根据计算最优值时得到的信息,构造一个最优解关于矩阵连乘问题原创 2016-08-18 10:57:09 · 381 阅读 · 0 评论