算法DAY-03
算法总结 DAY_03寻找重复的数LeetCode 287. find-the-duplicate-number
题目:
题解哈希表不满足空间O(1)的要求
class Solution {public: int findDuplicate(vector<int>& nums) { // unordered_map<int, int> map; // for(int i=0; i<nums.size(); i++){ // map[nums[i]] ++; // if(map[nums[i]] > 1){ // return nums[i]; // } // } set<int> s; for(int i=0; i<nums.size(); i++){ if(s.c ...
从暴力递归到动态规划
从暴力递归到动态规划动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决,是暴力递归的优化版本。所以做算题遇到不能直接写出的动态规划时,从暴力递归入手是个正确的选择,接下来我们看看两者的特点。
暴力递归
把问题转化为规模缩小了的同类问题的子问题
有明确的不需要继续进行递归的条件(base case)
有当得到了子问题的结果之后的决策过程
不记录每一个子问题的解
动态规化
从暴力递归中来
将每一个子问题的解记录下来,避免重复计算
把暴力递归的过程,抽象成了状态表达
并且存在化简状态表达,使其更加简洁的可能
解答流程参考左神视频教程《程序员代码面试指南》作者:左神-左程云带你学习进大厂必问难点暴力递归到动态规划——IT名企算法与数据结构题目最优解_哔哩哔哩_bilibili
接着我们明确一般的解答流程:暴力递归解法->带记忆数组的递归解法->动态规划解法,只要按照这个流程去做基本都能解答出来。下面我以大家最为熟悉的斐波那契数列入手。 斐波那契数列的递推式是f(n)=f(n-1)+f(n-2)。(1,1,2,3,5,8…)
第 ...
算法DAY-02
算法总结 DAY_02省份数量LeetCode 547. number-of-provinces
题目:
题解深度优先搜索深度优先搜索的思路是很直观的。遍历所有城市,对于每个城市,如果该城市尚未被访问过,则从该城市开始深度优先搜索,通过矩阵 isConnected 得到与该城市直接相连的城市有哪些,这些城市和该城市属于同一个连通分量,然后对这些城市继续深度优先搜索,直到同一个连通分量的所有城市都被访问到,即可得到一个省份。遍历完全部城市以后,即可得到连通分量的总数,即省份的总数。
class Solution {public: void dfs(vector<vector<int>>& isConnected, vector<int>& visited, int city, int i){ for(int j=0; j<city; j++){ if(visited[j] != 1 && isConnected[i][j] == 1) ...
算法DAY-01
算法总结 DAY_01两数之和LeetCode 1. Two Sum
题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
题解暴力法两层循环遍历:时间复杂度为 O(N^2),空间复杂度为 O(1),运行速度慢且内存空间消耗大。
class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { int size = nums.size(); if(size > 2){ sort(nums); for ...
校招高频智力题
高频智力题高楼扔鸡蛋问题有一栋楼共**100**层,一个鸡蛋从第**N**层及以上的楼层落下来会摔破, 在第**N**层以下的楼层落下不会摔破。给你**2**个鸡蛋,如何用最少的尝试次数,测试出鸡蛋不会摔碎的临界点?
首先要说明的是这道题你要是一上来就说出正确答案,那说明你的智商不是超过160就是你做过这题。所以建议你循序渐进的回答,一上来就说最优解可能结果不会让面试官满意。1. 暴力法从1到100,一层一层试。在最坏情况下,这个方法需要扔100次。 这个办法太蠢了,完全用不上两个鸡蛋这个条件,不建议回答这个方法。2. 二分法采用类似于二分查找的方法,把鸡蛋从一半楼层(50层)往下扔。如果第一枚鸡蛋,在50层碎了,第二枚鸡蛋,就从第1层开始扔,一层一层增长,一直扔到第49层。如果第一枚鸡蛋在50层没碎,则继续使用二分法,在剩余楼层的一半(75层)往下扔......这个方法在最坏情况下,需要尝试50次。3. 均匀法如何让第一枚鸡蛋和第二枚鸡蛋的尝试次数,尽可能均衡呢?很简单,做一个平方根运算,100的平方根是10。因此,我们尝试每10层扔一次,第一次从10层扔,第二次从20层扔,第三次从 ...
Axios使用
Axios使用Axios介绍Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
首先需要知道:axios不是一种新的技术,axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规范,有以下特点:
从浏览器中创建 XMLHttpRequests
从 node.js 创建 http 请求
支持 Promise API
拦截请求和响应
转换请求数据和响应数据
取消请求
自动转换 JSON 数据
客户端支持防御 XSRF
安装方式$ npm install axios
或通过标签引入:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
基本使用执行 GET 请求
// 为给定 ID 的 user 创建请求axios.get('/user?ID=12345') .then(functi ...
Vue基础入门
vue 简介什么是 vueVue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
构建用户界面前端开发者最主要的工作,就是为网站的使用者(又称为:网站的用户)构建出美观、舒适、好用的网页。
构建用户界面可分为以下大部分:
编写结构,基于 HTML 超文本标记语言,搭建出网页的内容结构。
美化样式,基于CSS 样式,美化网页的可视化效果。
处理交互,基于 Javascript 来操作网页中的 DOM 对象,处理用户和网页之间的交互行为。
构建用户界面的传统方式在传统的 Web 前端开发中,是基于 jQuery + 模板引擎 的方式来构建用户界面的。
编写结构,基于模板引擎技术,把数据渲染到页面上,初步解放了前端开发者,从此不用手动拼接字符串来渲染网页结构了,但需要定义大量的模板结构,数据变化时需要重新调用模板编译的函 ...
爬取Bilibili排行榜
爬取哔哩哔哩排行榜信息前言这是作者的一个Python通选课的小项目(有些粗糙)
本项目参考自:三秋树&二月花
原项目爬取时间为2020.12,B站排行榜源码已发生改变,目前已无法爬取。
本项目爬取时间为2021.12
项目源码: https://github.com/chenduowen233/Py-Bilibili
通过爬取哔哩哔哩排行榜,支持获取并分析番剧、国产动画、纪录片、电视剧等排行榜的排名、更新话数、播放量、平均每话播放量、追番人数等数据,并绘制出可视化视图。
数据爬取爬取网页网址:
# 国产动画排行榜分析# url = 'https://www.bilibili.com/v/popular/rank/guochan'# 番剧排行榜分析url = 'https://www.bilibili.com/v/popular/rank/bangumi'# 电视剧排行榜分析# url = 'https://www.bilibili.com/v/popular/rank/tv'
使用requests.get来获取网 ...
Echart使用
介绍ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10/11,chrome,firefox,Safari等),底层依赖轻量级的Canvas类库ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。创新的拖拽重计算、数据视图、值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘、整合的能力。
常用网址在ECharts官网运行编辑实例:
Examples - Apache ECharts
EChartsoption中各参数详细配置项:
[Documentation - Apache ECharts](Documentation - Apache ECharts)
样例
常见问题Echart主题设定先进入echarts 官网,找到主题下载
配置好了选择下载,选择JSON版本
将json文件放入项目文件中并引入
<script> import cdw from "../../../../asse ...
Git常用命令清单
Git常用命令清单
架构git有四个个工作区:工作区(workspace)
暂存区(index/stage)
本地仓库(local repository)
远程仓库(remote repository)
新建代码库# 在当前目录新建一个Git代码库$ git init# 新建一个目录,将其初始化为Git代码库$ git init [project-name]# 下载一个项目和它的整个代码历史$ git clone [url]
配置# 显示当前的Git配置$ git config --list# 编辑Git配置文件$ git config -e [--global]# 设置提交代码时的用户信息$ git config [--global] user.name "[name]"$ git config [--global] user.email "[email address]"
增加/删除文件# 添加指定文件到暂存区$ git add [file1] [file2] ...# 添加指定目录到暂存区,包括子目录$ git add [dir]# 添 ...