【剑指Offer系列03】数组中重复的数字

文章目录 题目代码PythonC++ 题目 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限制: 2 <= n <= 100000 代码 Python # 思路: # 原地置换,注意题干“长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内” # 复杂度: # O(N),空间复杂度只有O(1) class Solution: def findRepeatNumber(self, nums: List[int]) -> int: i = 0 # 遍历数组 while i<len(nums): if nums[i]==i: # 索引与其对应的值相等 i+=1 continue if nums[nums[i]] == nums[i]: return nums[i] # 重复数 nums[nums[i]], nums[i] = nums[i], nums[nums[i]] # 原地置换,注意顺序 return -1 # 无重复数 C++ class Solution { public: int findRepeatNumber(vector<int>& nums) { for(int i = 0; i < nums.

LRU算法

LRU算法:最近最少使用算法。大意就是根据最近访问的记录,对缓存的数据进行淘汰。如果一个数据最近被访问,或经常访问。则把数据放到列表的前面,而数据很久未访问,或者访问率较低,就会被放在后面,在列表内存不足的时候,将其移除缓存列表。 #include <iostream> #include <unordered_map> #include <algorithm> using namespace std; //双向链表结构 struct DLinkedNode { //保存一个key,value对 int key, value; DLinkedNode* prev; DLinkedNode* next; DLinkedNode(): key(0), value(0), prev(nullptr), next(nullptr) {} DLinkedNode(int _key, int _value): key(_key), value(_value), prev(nullptr), next(nullptr) {} }; class LRUCache { private: //哈希结构,保存键值映射 unordered_map<int, DLinkedNode*> cache; //双向链表头尾结点 DLinkedNode* head; DLinkedNode* tail; //存在多少结点 int size; //容量,总共可以保存多少结点 int capacity; public: LRUCache(int _capacity): capacity(_capacity), size(0) { head = new DLinkedNode(); tail = new DLinkedNode(); head->next = tail; tail->prev = head; } int get(int key) { //cache.

初识HTML(四)——style属性

style是一种新的首选的改变 HTML 元素样式的方式。通过 HTML 样式,能够通过使用 style 属性直接将样式添加到 HTML 元素,或者间接地在独立的样式表中(CSS 文件)进行定义。 修改背景颜色和字体 <html> <body style="background-color:PowderBlue;"> <h1>Look! Styles and colors</h1> <p style="font-family:verdana;color:red"> This text is in Verdana and red</p> <p style="font-family:times;color:green"> This text is in Times and green</p> <p style="font-size:30px">This text is 30 pixels high</p> </body> </html> style应用实例: 1.修改背景颜色 <html> <body style="background-color:yellow"> <h2 style="background-color:red">This is a heading</h2> <p style="background-color:white">This is a paragraph.</p> </body> </html> 2.标签的字体颜色和尺寸 style属性的多个分属性的数值需要‘;’来间隔。 <html> <body> <h1 style="font-family:verdana">A heading</h1> <p style="

安全测试知识点

安全测试的定义: 验证被测对象的安全保护机制能否在实际应用中保护系统不受非法侵入,用来保证系统本身数据的完整性和保密性。 安全性测试方法: 1.功能验证 采用黑盒测试方法,对涉及安全的软件功能,如:用户管理模块、权限管理模块、加密系统、认证系统等进行测试。 2.漏洞扫描 漏洞扫描器分为主机漏洞扫描器和远程漏洞扫描器 主机漏洞扫描器是在系统本地运行检测系统漏洞的程序,如(COPS、Tripewire、Tiger).远程漏洞扫描器是网络远程检测目标网络和主机系统漏洞的程序,如(Satan、ISS、Internet、Scanner). 3.模拟攻击实验 “授权”、“非授权” 安全测试工具: AWVS ( Acunetix Web Wulnerability Scanner)是一个自动化的Web 应用程序安全测试工具,它可以扫描任何可通过Web 浏览器访问的和遵循 HTTP/HTTPS 规则的 Web站点和 Web应用程序、国内普遍简称WVS。 HP WebInspect 可提供快速扫描功能、广泛的安全评估范围及准确的 Web 应用程序安全扫描结果。它可以识别很多传统扫描程序检测不到的安全漏洞。利用创新的评估技术,例如同步扫描和审核 (simultaneous crawl and audit, SCA) 及并发应用程序扫描,您可以快速而准确地自动执行 Web 应用程序安全测试和 Web 服务安全测试。WebInspect是最准确和全面的自动化的Web应用程序和Web服务漏洞评估解决方案。 AppScan对现代 Web 应用程序和服务执行自动化的动态应用程序安全测试(DAST) 和交互式应用程序安全测试 (IAST)。支持 Web 2.0、 JavaScript 和 AJAX 框架的全面的 JavaScript 执行引擎。涵盖 XML 和 JSON 基础架构的 SOAP 和 REST Web 服务测试支持 WSSecurity 标准、 XML 加密和 XML 签名。详细的漏洞公告和修复建议。40 多种合规性报告,包括支付卡行业数据安全标准 (PCI DSS)、支付应用程序数据安全标准 (PA-DSS)、 ISO 27001 和 ISO 27002,以及 Basel II

华为认证HCIE考试认证相关问题解答

很多人咨询小誉会问HCIE笔试,LAB,面试相关问题,今天小誉就给大家来解答下: 笔试 试卷题型: 单选、多选、判断 考试时长: 90min 及格分/总分: 600/1000 考试费用: 300USD 考试语言: 中文,英文 实验 试卷题型: 操作 考试时长: 480min 及格分/总分: 80/100 考试费用(实验&面试): 8000CNY 考试语言: 中文,英文 面试 试卷题型: 问答 考试时长: 60min 及格分/总分: 80/100 考试费用(实验&面试): 8000CNY 考试语言: 中文,英文 

nodejs连接有密码的redis、连接有密码的mongoDB

nodejs连接redis redis版本5.0.6 nodejs依赖包redis版本2.6.2 import redis from 'redis' const redisLink = 'redis://127.0.0.1:6379' const pwd = '289181' const opts = { auth_pass: pwd, } const redisClient = redis.createClient(redisLink, opts) redisClient .on('error', err => console.log('------ Redis connection failed ------' + err)) .on('connect', () => console.log('------ Redis connection succeed ------')) export default { redis: redis, redisClient: redisClient, } nodejs连接mongoDB nodejs依赖包mongoose版本4.6.0 ; mongoomise版本0.0.8;bluebird版本3.4.6; nodejs v12.13.0 mongoDB 版本4.2.1 在mongoDB中执行以下命令创建用户: db.createUser({ user:'admin',pwd:'test123',roles:[ { role:'userAdminAnyDatabase', db: 'admin'}]}); nodejs连接代码如下:

SemEval 2014数据集预处理:Python xml.etree.cElementTree解析XML文件

在做Aspect-level情感分类时一般会用到SemEval 2014数据集。官网给的数据集都是XML格式,我们要对其进行解析。 首先看一下数据结构。 一个XML文件里包含多个sentence,每个sentence里包含text、aspectCategories和aspectTerms子节点,即我们需要提取出来的内容。 下面是代码。 首先,导入库。 import xml.etree.cElementTree as ET Python标准库中,提供了ElementTree的两种实现。一个是纯Python实现的xml.etree.ElementTree,另一个是速度更快的C语言实现的xml.etree.cElementTree。第二种速度更快,而且内存消耗较少。 接下来读文件,获取根节点。 path = 'data/restaurants-trial.xml' tree = ET.parse(path) root = tree.getroot() 子节点是嵌套的,我们可以通过索引访问特定的子节点。 如: root[0][0].text 输出是第一个sentence中text节点的内容。 然后获取XML中的元素,保存到数组中即可。 获取aspectCategory data = [] for sentence in root.findall('sentence'): text = sentence.find('text').text aspectCategories = sentence.find('aspectCategories') for aspectCategory in aspectCategories.findall('aspectCategory'): category = aspectCategory.get('category') polarity = aspectCategory.get('polarity') data.append((text, category, polarity)) Element.findall(): 只找到带有标签的元素,该标签是当前元素的直接子元素。 Element.find() :找到第一个带有特定标签的子元素。 Element.text:访问标签的内容 Element.get():访问标签的属性值 也可以转化成dataframe,保存到csv文件里。 df=pd.DataFrame(data,columns=['text','category','polarity']) df.to_csv('data/data.csv',sep=' ') df.head() 提取aspectTerms 提取aspectTerms和提取aspectCategories有一点不同,即并不是每个sentence都有aspectTerms节点,因此我们不能直接查找所有sentence的aspectTerms节点。那么解决方法是什么呢。这里就要用到强大的xpath表达式了,’.//aspectTerms/…'的含义是选择所有包含aspectTerms的sentence节点,其中“//”表示从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。“…”表示选择当前节点的父节点。 data=[] for sentence in root.

IDEA中maven的Dependencies中出现红色波浪线问题分析

IDEA中maven的Dependencies中出现红色波浪线问题分析 IDEA-Maven的Dependencies中出现红色波浪线解决方法总结 IDEA-Maven的Dependencies中出现红色波浪线 我们使用maven管理项目依赖时,在导入依赖后,IDEA右边的maven管理窗口的Dependencies会出现红色波浪线,原因可能是多个地方引用同一jar包,或者引用同一jar包,但引用版本不同(groupId和artifactId相同,但version不同)。 解决方法 方法1 :可在pom文件中删除引用,保存后,带引用红色消失,再撤销删除,最后需要引用的包依然会被导入,但红色波浪就会消失,网上很多方案介绍操作也是如此。 方法2:分析依赖关系,修改POM文件依赖版本,选择排除冲突的依赖包。 总结 红色的波浪线并不会影响项目的正常运行,可能会使一些有强迫症的同学有点看不惯,遇到红色就想去除,以上方法仅供参考,如有错误,请指正。

OpenCV-C++-CUDA-05-高斯双边加速,实时美颜

本章我们继续使用OpenCV-C++版本在CUDA下的编程应用,主要使用双边模糊,对图像进行美颜细化。 1、高斯双边模糊 int main(int argc, char** argv) { Mat image = imread("F:/test/face_image.jpg"); imshow("input image", image); cuda::GpuMat image_gpu,dst; image_gpu.upload(image); //高斯双边模糊 cuda::bilateralFilter(image_gpu, dst, 0, 100, 15, 4); Mat result; dst.download(result); imshow("result", result); waitKey(0); return 0; } 原图: 模糊处理后的结果: 看上去效果还不错,脸上的坑坑洼洼都被去掉了。 当然,除了图片以外,还可以使用视频或摄像头: void video_test_gpu() { VideoCapture cap(0); Mat frame,result; cuda::GpuMat frame_gpu,dst_gpu; while (true) { double t1 = getTickCount(); cap.read(frame); frame_gpu.upload(frame); cuda::bilateralFilter(frame_gpu, dst_gpu, 0, 50, 10, 4); dst_gpu.download(result); double fps = getTickFrequency()/(getTickCount() - t1); putText(result, format("

IDEA RUST插件

[IDEA RUST插件](https://plugins.jetbrains.com/plugins/nightly/8182)

MyBatis-Plus 笔记

目录 一、MyBatis-Plus 1、简介 2、使用 SpringBoot 快速使用 MyBatis-Plus 二、Mybatis-Plus 常用操作 1、配置日志 2、简单认识一下常用注解 3、代码生成器 4、自动填充数据功能 5、逻辑删除 6、分页插件的使用 7、乐观锁的实现 三、Mybatis-Plus CRUD 操作简单了解一下 1、Mapper 接口方法(CRUD)简单了解一下 2、Service 接口方法(CRUD)简单了解一下 3、条件构造器(Wrapper,定义 where 条件) 一、MyBatis-Plus 1、简介 MyBatis-Plus 是一个 Mybatis 增强版工具,在 MyBatis 上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在。 官网文档地址: https://mp.baomidou.com/guide/ MyBatis-Plus 特性: https://mp.baomidou.com/guide/#%E7%89%B9%E6%80%A7 2、使用 SpringBoot 快速使用 MyBatis-Plus (1)准备工作 需要 Java 开发环境(JDK)以及相应的开发工具(IDE)。 需要 maven(用来下载相关依赖的 jar 包)。 需要 SpringBoot。 可以使用 IDEA 安装一个 mybatis-plus 插件。 (2)创建一个 SpringBoot 项目。 方式一:去官网 https://start.spring.io/ 初始化一个,然后导入 IDE 工具即可。 方式二:直接使用 IDE 工具创建一个。 Spring Initializer。

【LeetCode】从尾到头反过来返回每个节点的值(用数组返回)day03

题目 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10000 第一次 //使用栈的特性先进后出 //复杂度O(n) public int[] reversePrint(ListNode head) { Stack<ListNode> stack = new Stack<ListNode>(); ListNode temp = head; while(temp!= null){ stack.push(temp); temp = temp.next; } int[] result = new int[stack.size()]; for(int i = 0 ; i< stack.size();i ++ ){ result[i] = stack.pop().val; } return result; } //自己脑瓜子有点问题 public int[] reversePrint(ListNode head) { ListNode[] result = new ListNode[]; ListNode temp = head; int count = 0; while(temp !

户型图去水印

一般的户型图上都是有各种水印的,在处理过程中可能会造成各种影响,这里提出一个简单的方法去水印: #去水印 import cv2 import numpy as np img = cv2.imread('./pic/ceshi3.jpg') new = np.clip(2.0*img-160, 0, 255).astype(np.uint8) cv2.imwrite('./out/cleaned3.jpg', new) #这里面用到了np.clip()方法,如np.clip(a, 1,8),它的作用是将a里面所有小于1的设置为1,如0<1所以修改为1, 所有大于8的修改为8, #最终保证数组里面的元素全部都在1~8之间。 #上面的代码使用np.clip()的作用就是保证经常计算后的img能够不越界,一致保持在[0,255]之间。 去水印之前: 去水印之后:

vagrant 启动失败 There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlli......

PS C:\Users\ben\ubuntu16> vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Resuming suspended VM... ==> default: Booting VM... There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below. Command: ["startvm", "494f01d6-d48c-4682-9da0-01de843424a3", "--type", "headless"] Stderr: VBoxManage.exe: error: Failed to load unit 'lsilogicscsi' (VERR_SSM_LOADED_TOO_LITTLE) VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole https://github.com/hashicorp/vagrant/issues/9318 使用power shellhttps://stackoverflow.com/questions/34778147/cannot-boot-windows-guest-in-virtualbox-without-kernel-module-error

springboot中在方法上使用@Cacheable注解实现redis缓存

简介 平时大家使用redis一般都是直接存储key,value. spring全家桶肯定帮大家想到了这一点.可以让大家方便的使用注解操作redis节省代码量. 把总结放前面: 总共有三种方式,底层利用了spring的aop,并且方法返回的对象一定要实现序列化 @Cacheable:注解于方法上,第一次会把后面的cacheNames+key 拼接为key,把返回值序列化后作为value set到redis中去.后面再一次访问相同的key的时候就直接从redis中取值了,不会再访问这个方法 @Override @Cacheable(cacheNames = "product",key = "#id") public ProductInfo findOne(String id) { return productInfoRepository.findById(id).orElse(null); } @CachePut:每次都会把方法的返回值序列化之后set到redis中去(每次都会执行方法),即更新这个key对应的值 @Override @CachePut(cacheNames = "product",key = "#productId") public ProductInfo onSale(String productId) { ProductInfo productInfo = this.findOne(productId); if(null == productInfo){ throw new SellException(ResultEnum.PRODUCT_NOT_EXIST); } if(productInfo.getProductStatusEnum().getCode() == ProductStatusEnum.UP.getCode()){ log.warn("[商品上架处理]-----商品已经是上架状态了,这里直接返回原ProductInfo={}",productInfo); }else { productInfo.setProductStatus(ProductStatusEnum.UP.getCode()); productInfo = this.save(productInfo); } return productInfo; } @CacheEvict:这个比较好理解,就是从redis中把这个key删除了 @Override @CacheEvict(cacheNames = "product",key = "#productInfo.productId") public ProductInfo save(ProductInfo productInfo) { return productInfoRepository.

OpenCV-C++-CUDA-02-图像基本操作之像素操作

本章继续学习CUDA下的OpenCV学习,主要是学习CUDA下图像的像素变换。 一、图像之间的加减乘除 (1) 图像相加 主要API: cuda::add(input image1, input image2, output image) 需要相加的两张图片: 相关代码: #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using namespace std; int main(int argc, char **argv) { Mat src1 = imread("D:/opencv/opencv_4.1.2/sources/samples/data/WindowsLogo.jpg"); Mat src2 = imread("D:/opencv/opencv_4.1.2/sources/samples/data/LinuxLogo.jpg"); imshow("input1", src1); imshow("input2", src2); //GPU操作 cuda::GpuMat g_src1, g_src2,dst; g_src1.upload(src1); g_src2.upload(src2); cuda::add(g_src1, g_src2, dst);//图像相加,每个通道的值分别相加(像素值超过255会等于255) Mat result; dst.download(result); imshow("reslut", result); waitKey(0); return 0; } 结果: (2)图像相减 cuda::subtract(input image1, input image2, output image); #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using namespace std; int main(int argc, char **argv) { Mat src1 = imread("

win10+Anaconda+pytorch+CUDA10.1安装指南

win10+Anaconda+pytorch+CUDA10.1安装指南 一、电脑配置检查1. 检查电脑显卡类型2.设置首选图形处理器 二、安装CUDA1.NVIDIA开发者网站下载CUDA 10.12.安装CUDA 10.13.验证CUDA安装 三、安装cuDNN1.下载cuDNN2.安装cuDNN 四、安装Anaconda3 2019.102.配置方法:3.验证Anaconda安装 五、创建管理虚拟环境六、安装PyTorch CUDA版1.官网获取安装命令2.在PyTorchLearn虚拟环境中安装PyTorch3.文件下载太慢或者下载失败4.验证PyTorch安装 七、更新组件1.torch module无法调用2.Anaconda中ImportError: No module named 'matplotlib' 问题的解决 参考链接: 一、电脑配置检查 1. 检查电脑显卡类型 注意电脑显卡不是NVIDIA的忽略这一步,非NVIDIA显卡不能安装CUDA。 在桌面鼠标右键: 点击NVIDIA 控制面板->选择左下角 系统信息 可以看到第三行信息支持CUDA的,我的显卡是GTX1650,官网没有显示是否支持但是能安装CUDA 2.设置首选图形处理器 二、安装CUDA 1.NVIDIA开发者网站下载CUDA 10.1 https://developer.nvidia.com/cuda-downloads 根据自己的版本选择后下载 2.安装CUDA 10.1 双击运行cuda_10.1.243_426.00_win10.exe 设置用于提取CUDA安装程序的临时目录 提取完成后,经过一段漫长的兼容性检查 选择自定义安装 自定义安装选项的时候,CUDA是核心组件必须安装,如果NVIDIA GeForce Experience等组件的当前版本比新版本低可以选择安装。 选择安装位置一般不要更改默认位置 提示没有Visual Studio,可以不用理会,勾选并点击NEXT。(注意关闭安全软件,否则会失败) 安装完毕,结束 3.验证CUDA安装 打开命令行工具(win+r:运行 cmd) 输入nvcc -V (查看版本信息),安装成功 三、安装cuDNN 1.下载cuDNN 官网: https://developer.nvidia.com/cudnn 下载需要登陆账号,登陆界面“Join”可以注册账号,若不想注册可以将下载链接复制到迅雷等其他下载器中下载。 根据自己的CUDA版本自行选择下载 2.安装cuDNN 解压下载的cudnn-10.1-windows10-x64-v7.6.5.32.zip压缩文件 将三个文件夹拷贝至CUDA 10.1的安装目录(安装CUDA时选择的安装位置)下 添加环境变量,系统变量->Path中新增C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib\x64 四、安装Anaconda3 2019.

【剑指Offer系列07】重建二叉树

文章目录 题目代码PythonC++ 题目 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / 9 20 / 15 7 限制: 0 <= 节点个数 <= 5000 代码 Python # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # 思想: # 1.得到前序根结点 # 2.搜索根节点在中序索引,划分左右子树 # 3.分别递归遍历左右子树 # 复杂度:O(N),N是节点数量,前提是建立哈希表再搜索根节点在中序索引会是O(1),以空间换时间 class Solution: def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode: self.