DCC

2020-07-18:给定一个无序数组和一个目标值,找出数组中两个数之和等于目标值的所有组合,并指出其时间复杂度。

倖福魔咒の 提交于 2020-08-04 15:12:12
福哥答案2020-07-18: 假设数组是[3,5,3,5],目标值是8。答案是否可重复,题里没说,所以分3种情况。如下: 1.重复。答案是【0,1】【0,3】【1,2】【2,3】,序号组合,共4种组合。 解法如下: 1.1.嵌套遍历。时间复杂度:O(n^2)。 1.2.哈希法。键存数组元素值,值存出现次数。时间复杂度:O(n)。 1.3.排序+双指针夹逼。时间复杂度:O(nlogn)。 2.半重复。答案是【0,1】【2,3】,也可能是【0,3】【1,2】,序号组合,共2种组合。 解法如下: 2.1.嵌套遍历。时间复杂度:O(n^2)。 2.2.哈希法。键存数组元素值,值存出现次数。时间复杂度:O(n)。 2.3.排序+双指针夹逼。时间复杂度:O(nlogn)。 3.不重复。答案是[3,5],值组合,共1种组合。 解法如下: 3.1.嵌套遍历。时间复杂度:O(n^2)。 3.2.哈希法。键存数组元素值,值不存。时间复杂度:O(n)。 3.3.排序+双指针夹逼。时间复杂度:O(nlogn)。 3.4.位图法。时间复杂度:O(目标值)。 代码采用3.2方式,用golang语言编写。代码如下: package main import "fmt" func main() { nums := []int{3, 5, 3, 5, 4, 4} target := 8 for k, _ :=

Python笔记:用matplotlib绘制柱状图

眉间皱痕 提交于 2020-07-29 06:35:51
matplotlib是Python中最基本的绘图库,而柱状图又是使用频率较高的可视化图形。下面我就在有pyecharts库和R语言,echarts绘图经验的基础上,简单得摸索一下用matplotlib绘制柱状图的方法。代码如下: # 导入相关的库 import pandas as pd import numpy as np import matplotlib.pyplot as plt # 在线显示 %matplotlib inline # 定义画布的大小 fig = plt.figure(figsize = (15,8)) # 添加主标题 plt.title("各品牌汽车的销量") # 设置X周与Y周的标题 # plt.xlabel("品牌") # plt.ylabel("销量") # 显示网格线 # plt.grid(True) # 设置 x轴 数据 x = np.array(["宝马","奔驰","奥迪","马自达","大众","布加迪","兰博基尼","法拉利","本田","丰田"]) # 设置 y轴 数据 y = np.array([1000,800,600,400,300,250,150,100,80,50]) # 直接绘制简单的柱状图 # plt.bar(x,y) # 绘制柱状图,并把每根柱子的颜色设置为洋红色 # plt.bar(x,y,color = "m") #

被新来的同事吊打!他用Python完成了我半天的工作量,不用Excel了?

非 Y 不嫁゛ 提交于 2020-07-29 04:31:32
做过数据分析的程序员都知道:Excel、Tableau等这些亲民工具都是数据分析的得力助手。 但用Excel做分析,繁琐的每一步都是来自鼠标点击,中间如果一步有误,很多步骤都需要重新调整,浪费大量时间。 这不,前天临近下班时间,老板突然Q我:算一下近一年销售额总额TOP5的品牌以及对应的销售额。 接收完文档我傻眼了,公司旗下有20个品牌,这些品牌涉及到128个类目,业务部门总共发来了128张表,每一份表格对应着一个细分行业的数据,像什么各类户外服装、垂钓装备、救生装备应有尽有。 每张表,以月的维度记录着每个品牌的日期、访客、客单、转化、所属类目(细分行业)等数据: 习惯性的打开Excel,我开始盘算:最终需求是要筛选出近一年销售额总和排名前5的品牌,这一摊子数据,对单独的一张表进行分类汇总,能够得到该细分行业各品牌的销售额,想要得到所有行业的销售额总和,得分类汇总128次,最后对128次结果再次合并。 “这个任务看上去很艰巨,不过,考验的主要是体力。” 我一眼就“看穿”了事情的本质,右手食指在鼠标上飞速跳动,以90秒一张表格的速度疯狂推进。按照这个速度,不考虑疲劳值对速度的拖累,大概3.2个小时就能够完成任务。 然而,刚开始还没3分钟,老板找到我:刚交你的任务暂时不用做了,新来的已经得出结论了,看着还挺专业。 多年来的职业敏感性驱使我立马跟新同事聊了一下,“刚刚那些表分分钟就搞定了

【漫画】JAVA并发编程 J.U.C Lock包之ReentrantLock互斥锁

岁酱吖の 提交于 2020-07-29 04:06:58
原创声明:本文来源于公众号【胖滚猪学编程】 转载请注明出处 在 JAVA并发编程 如何解决原子性问题 的最后,我们卖了个关子,互斥锁不仅仅只有synchronized关键字,还可以用J.U.C中的Locks的包来实现,并且它非常强大!今天就来一探究竟吧! ReentrantLock 顾名思义,ReentrantLock叫做可重入锁,所谓可重入锁,顾名思义,指的是线程可以重复获取同一把锁。 ReentrantLock也是互斥锁,因此也可以保证原子性。 先写一个简单的demo上手吧,就拿原子性问题中两个线程分别做累加的demo为例,现在使用ReentrantLock来改写: private void add10K() { // 获取锁 reentrantLock.lock(); try { int idx = 0; while (idx++ < 10000) { count++; } } finally { // 保证锁能释放 reentrantLock.unlock(); } } ReentrantLock在这里可以达到和synchronized一样的效果,为了方便你回忆,我再次把synchronized实现互斥的代码贴上来: private synchronized void add10K(){ int start = 0; while (start ++ < 10000){

Newtonsoft 六个超简单又实用的特性,值得一试 【下篇】

邮差的信 提交于 2020-07-28 10:31:43
一:讲故事 上一篇介绍的 6 个特性从园子里的反馈来看效果不错,那这一篇就再带来 6 个特性同大家一起欣赏。 二:特性分析 1. 像弱类型语言一样解析 json 大家都知道弱类型的语言有很多,如: nodejs,python,php,它们有一个🐮👃的地方就是处理json,不需要像 强类型语言 那样还要给它配一个类,什么意思呢? 就拿下面的 json 说事。 { "DisplayName": "新一代算法模型", "CustomerType": 1, "Report": { "TotalCustomerCount": 1000, "TotalTradeCount": 50 }, "CustomerIDHash": [1,2,3,4,5] } 这个 json 如果想灌到 C# 中处理,你就得给它定义一个适配的类,就如 初篇 的客户算法模型类,所以这里就有了一个需求,能不能不定义类也可以自由解析上面这串 json 呢??? 哈哈,当然是可以的, 反序列化成 Dictionary 即可,就拿提取 Report.TotalCustomerCount 和 CustomerIDHash 这两个字段演示一下。 static void Main(string[] args) { var json = @"{ 'DisplayName': '新一代算法模型', 'CustomerType': 1,

CVE-2020-0796漏洞复现

心不动则不痛 提交于 2020-07-28 10:16:50
漏洞描述: SMB远程代码执行漏洞 SMB 3.1.1协议中处理压缩消息时,对其中数据没有经过安全检查,直接使用会引发内存破坏漏洞,可能被攻击者利用远程执行任意代码。攻击者利用该漏洞无须权限即可实现远程代码执行,受黑客攻击的目标系统只需开机在线即可能被入侵。 漏洞原理: Microsoft服务器消息块(SMB)协议是Microsoft Windows中使用的一项Microsoft网络文件共享协议。在大部分windows系统中都是默认开启的,用于在计算机间共享文件、打印机等。 Windows 10和Windows Server 2016引入了SMB 3.1.1 。本次漏洞源于SMBv3没有正确处理压缩的数据包,在解压数据包的时候使用客户端传过来的长度进行解压时,并没有检查长度是否合法,最终导致整数溢出。 利用该漏洞,黑客可直接远程攻击SMB服务端远程执行任意恶意代码,亦可通过构建恶意SMB服务端诱导客户端连接从而大规模攻击客户端。 影响范围: Windows 10 Version 1903 for 32-bit Systems Windows 10 Version 1903 for x64-based Systems Windows 10 Version 1903 for ARM64-based Systems Windows Server, Version 1903 (Server

linux学习的第八天

限于喜欢 提交于 2020-07-28 04:15:51
今天的主要讲了设备命名规则,磁盘分区、挂载与卸载,磁盘容量配额 1、磁盘命名方式: /dev/sd[a-z]n,其中: a-z 表示设备的顺序号,由系统内核识别顺序来决定的,如 sda 表示第一块硬盘, sdb 是第二块...... n表示每块磁盘上划分的磁盘分区编号,在分区时指定。 2、磁盘分区(磁盘容量超过2T,要使用gdisk命令) fdisk [选项] device,如: fdisk /dev/sdb 对第二块磁盘分区操作。 3、磁盘挂载 格式:mount [挂载点] [挂载目录],挂载是让用户能使用磁盘资源,将磁盘与目录相关联的操作,磁盘必须挂载后才能用。df -h查看各分区的信息,挂载后中要使永久生效,需编辑 vim /etc/fstab文件,在文件内容后追加 /dev/sdb1 /sdb1 xfs defaults 0 0等内容,如果是交换分区则追加内容为: /devices swap swap defaults 0 0; 卸载已挂载的磁盘设备,格式:umount [挂载点或设备文件] 4、磁盘配额 磁盘配额服务是限制某个用户或某个用户组针对特定文件夹可以使用的最大磁盘空间或最大文件个数,达到这个最大值就不再允许继续使用,使用quota命令进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数。 来源: oschina 链接: https://my

OSChina 周日乱弹 —— 一个幼小的猕猴桃等待食物转身

故事扮演 提交于 2020-07-27 08:24:28
1@ 辽元 起床以后, 突然发现时间已经10点啦! 不会晚了吧? 忽然想起来今天是周末, 13 “梦见自己变成猫后,一下子惊醒了,不对是笑醒了。” @ 冰峰雪座 觉得昨晚的睡眠质量实在不是很好, 合租实在是一个很麻烦的事情, “我虽然不会回敬 但是我会直说 大哥你小声点我要睡觉 有些事你憋着永远都解决不了,好好沟通才是王道。” 起床后@ 翻身码农把歌唱 开始准备早餐啦! 啊!不对 是早午混合餐。 已经都11点多了么。 也不能算早餐 也不能算午餐, “一个幼小的猕猴桃等待食物转身。” @ 机器人-1 问今天的饭是什么呀? “日式狗肉面 喜欢么?” 吃饭的时候, @ 桃夭来了呀 被教育, 好好吃饭不需多说话, 不要管别人, “反派死于话多。” @ 丌官尚雄 饭后觉得假期就应该有一个假期的样子, 去书店看看书吧, 在路上不禁感叹到现在经济下滑的真厉害, “经济凋敝,站街没人撸。” @ 曾经蜡笔没有小新 来到了书店, 先去看了看经济学专栏, “这本是我写的,额,这本也是。” 出门的时候@ 小蓦然 发现 外面下起了大雨, 自己没带雨伞啊! @ 小小的一世 回到家, 回忆了一下在书店学到的知识, 有时间看看新闻, 但还有更好的选择, @ clouddyy : 乱弹已经是我生活的一部分了,没得看非常不习惯 看不到乱弹的时候, 我睡着做梦也想看, 就灵魂出窍了, “罕见的猫猫灵魂出窍画面。”

Docker 定制ssh、java等基础服务镜像

点点圈 提交于 2020-07-27 05:58:55
1、启动一个基于centos镜像的容器 # docker run –p 10022:22 - ti centos bash [root@f743588bbeef /]# -p: 本地端口映射容器22端口,是为了后面启动ssh后测试能否正常登陆 2、在容器中安装openssh-server、java等 [root@f743588bbeef /]# yum install -y -q openssh-server java-1.7.0-openjdk net-tools 3、修改sshd_config配置文件 [root@f743588bbeef /]# ssh-keygen -q -t rsa -b 2048 -f /etc/ ssh /ssh_host_rsa_key -N '' [root@f743588bbeef /]# ssh-keygen -q -t ecdsa -f /etc/ ssh /ssh_host_ecdsa_key -N '' [root@f743588bbeef /]# ssh-keygen -t dsa -f /etc/ ssh /ssh_host_ed25519_key -N '' [root@f743588bbeef /]# sed -i " s/UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g "

协议生成器工具

a 夏天 提交于 2020-07-27 02:56:16
前言 何为协议生成器?其实就是前后端同学在对协议的时候使用的工具,手动添加对应的内容,最后一键发布自己需要的任何与协议有关的内容。 有人会说,我直接写proto文件用它的命令行也可以生成很多文件的。不过proto本身的能力,我工具都可以使用,因为本身工具就可以调用proto。下面开始介绍一下这款附带源码的工具 良心价格,买来不一定要用,但是你可以拿来学习这种思想;用什么语言开并不重要,重要的还是思想;编程编的就是思想,就跟写文章一样。 介绍 文件功能 定义服务 可能我门一款游戏用到好几个服务,比如登陆服务,大厅获得道具服务,战斗服务。对于棋牌游戏或者联网对战游戏尤其如此。而这些服务器有的是长连接,有的是短链接,有的是proto格式,有的是json格式。在这个工具里都是可以设置的。 定义协议号 我们用socket做游戏的一般定义格式的时候都是协议号+数据长度+数据段。这个很正常,当然http也是可以这样定义的。比如 http://xxx.xxx.com:80/classname/functionname?xxx=cc&xx=xx ip+端口,这个跟socket是一样的。端口之后和问号之前的就可以定义为协议号了,也就是资源路径。这样就可以长短链接使用同样的处理方式。 定义模块 我个人喜欢将不同的功能分为不同的模块。然后在模块中定义消息。 定义消息格式 比如这个商店模块