关于搜索
文章平均质量分 50
一些有关于搜索的题。
youngsea8
喜欢学习!
展开
-
Chapter08Searching.md
here原创 2021-03-22 22:43:55 · 79 阅读 · 0 评论 -
1018 Public Bike Management (30 分) dijkstra 回溯
dijkstra+BFS爆搜所有的路径直接找即可,边的数目为MMM,那么时间复杂度为O(M)O(M)O(M)// 过了四个点#pragma warning(disable:4996)#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<queue>#include<stack>#include<string&原创 2021-03-10 21:58:45 · 121 阅读 · 0 评论 -
1021 Deepest Root (25 分) dfs,求树的深度
解体思路寻找到所有的叶子节点,进行dfs,记录深度,最后输出即可。、又犯了zz错误,自罚三杯。代码#include<cstdio>#include<iostream>#include<algorithm>#include<vector>using namespace std;int n;struct Node{ int v; Node(int v_=0):v(v_){}};vector<vector<N原创 2021-03-05 22:20:22 · 62 阅读 · 0 评论 -
300. 最长递增子序列 动态规划O(n2) 贪心+二分 O(nlogn)
思路动态规划,定义状态dp[i]dp[i]dp[i]代表以 nums[i]nums[i]nums[i]结尾的最长递增子序列的长度,这样的话dp[i]dp[i]dp[i]和其子问题dp[k],0<=k<idp[k],0<=k<idp[k],0<=k<i便产生了联系、状态转移方程dp[i]=max(dp[k]+1),0<=k<iif(nums[i]>nums[k])dp[i]=max(dp[k]+1),0<=k<i if(nums[i]&原创 2021-03-01 11:12:44 · 155 阅读 · 0 评论 -
1013 Battle Over Cities (25 分)
暴力算法每次深搜判断连通分量的个数resresres,然后结果就是res−1res-1res−1。每次的复杂度都是边的个数记为eee,O(e)O(e)O(e),那么MMM次查询总共的时间复杂度为O(M∗e)O(M*e)O(M∗e)。#include<cstdio>#include<iostream>#include<algorithm>#include<vector>using namespace std;vector<vector原创 2021-02-23 14:49:03 · 58 阅读 · 0 评论 -
1010 Radix (25 分)
网友的,思路和我一样#include <cstdio>#include <stdlib.h>#include <algorithm>#include <string.h>using namespace std;char tmp1[15],str1[15];char tmp2[15],str2[15];long long num1=0,num2=0; int flag;typedef long long LL;LL radix;LL in原创 2021-02-21 23:48:29 · 62 阅读 · 0 评论 -
1007 Maximum Subsequence Sum (25 分)
题解想清楚怎么计算最长子序列的最大和呢?我们要想清楚这一件事,那就是负数的贡献永远是要抛弃的想想我们计算这个和肯定是想要正数累加到一块,从哪来时累加,肯定是从第一个正数开始累加,这个和记为tmpsumtmp_sumtmpsum,在这个tmpsumtmp_sumtmpsum一直为正数的时间内,我们要不断的更新我们的最终结果sum_sum\_sum_,当我们的tmpsumtmp_sumtmpsum为负数的时候我们肯定就不想要前面的这一块了,这个时候直接抛掉这一块就好了,继续在后面找到第一个正数重复原创 2021-02-19 17:00:49 · 75 阅读 · 0 评论 -
1004. 最大连续1的个数 III
题解自己的做法很麻烦并且时间复杂度高,最坏O(n2)O(n^2)O(n2)原因是没有想到去数学推导,一步一步去想很费劲,,,应该改掉这个毛病。想到了二分的做法,但是写麻烦了,首先统计了所有0块所在的初始位置和个数,记为数组a,然后遍历所有的地方去填充0,这个时候就不能方便的从a中得到填充到哪为止,从而陷入了困境。科学的做法,参造官方:首先要想得到最大的连续的1的个数,所有的K个的份额一定是把多个1的块连成一个块这一点没有疑问。那么问题转化为想清这一步下面就简单了,我们隐隐约约感觉到,一个K,原创 2021-02-19 13:24:15 · 86 阅读 · 0 评论 -
561. 数组拆分 I
解题思路1. 贪心思路2. 假如我们有a0,a1,a2,...,ai,...,an−1a_0,a_1,a_2,...,a_i,...,a_{n-1}a0,a1,a2,...,ai,...,an−1这些数字,且有a0<a1<...<ai<...<an−1a_0<a_1<...<a_i<...<a_{n-1}a0<a1<...<ai<...<an−1.3. 这样的话对于a0a_0a0,我们必有a0原创 2021-02-16 13:06:51 · 53 阅读 · 0 评论 -
33. 搜索旋转排序数组
33. 搜索旋转排序数组最简单的方法顺序查找,时间复杂度O(n)O(n)O(n)二分查找,这个leetcode的官方题解写的非常的好。点我看leetcode的官方题解class Solution { int len_; int target_; public int search(int[] nums, int target) { len_ = nums.length; target_ = target; if (原创 2021-02-14 16:11:09 · 65 阅读 · 0 评论 -
34. 在排序数组中查找元素的第一个和最后一个位置
解题思路二分查找。先二分找到targettargettarget所在的位置,找到之后再从targettargettarget处向两边拓展找到targettargettarget这个数字所占据的范围。**找到之后再从targettargettarget处向两边拓展找到targettargettarget这个数字所占据的范围。**的核心代码如下:if (target_ == nums_[mid]) { int begin = mid; int end = mid; w原创 2021-01-30 15:08:11 · 86 阅读 · 0 评论 -
240. 搜索二维矩阵 II
递归求解最简单的方法直接扫描二维数组,时间复杂度O(n2)O(n^2)O(n2)设boolean solve(inti,intj,boolean[][]vis)boolean\ solve(int i,int j,boolean[][] vis)boolean solve(inti,intj,boolean[][]vis)代表当前在位置(i,j)(i,j)(i,j),准备搜索周围的地方。vis[i][j]vis[i][j]vis[i][j]代表位置(i,j)(i,j)(i,j)是.原创 2021-01-27 13:30:52 · 62 阅读 · 0 评论