next

【日拱一卒】链表——回文判断

时光怂恿深爱的人放手 提交于 2020-08-14 05:10:43
需求 判断一个链表是否是回文链表 回文的形式大家应该都知道,类似 abcba 或者 abccba 这种对称的方式都是回文。 难点 如果将链表形式换成数组,是不是就简单很多了。针对一个长度为n的数组,我们可以一一比对节点0和节点n-1,节点1和节点n-2,直到收尾索引相等。 但是这里说的是链表,显然遍历完整个链表,找到尾结点,然后再回溯进行比较显得有些不切实际,况且这里并不是双向链表。 所以这里就要换个思路,重点是从回文的对称性着手。 思路 关键字:快慢指针、链表反转 1、初始化两个指针快指针和慢指针,慢指针每次走一步,快指针每次走两步 2、依次遍历整个链表,直到快指针遍历完链表 此时fast指针已经率先到达链表的尾结点,停止遍历。因为该链表包含奇数个元素,所以slow节点需要再移动一步。指向节点2。 3、此时借助慢指针将后半部分链表反转 反转后链表头指针为pre 4、依次遍历比较原来链表和反转后的链表pre的值是否相等,直到pre遍历到尾结点。 有了如上思路,写出对应代码就是顺理成章的事了。 代码实现 func isPalindrome(head *ListNode) bool { if head == nil || head.Next == nil { return true } fast := head slow := head // 快慢指针,快指针每次移动两步

数据结构与算法

坚强是说给别人听的谎言 提交于 2020-08-14 05:04:41
第 1 章 绪论 时间复杂度 空间复杂度 第 2 章 线性表 概念 顺序表 单链表 #include<iostream> using namespace std; ​ //构建一个节点类 template<typename DataType> class Node { public: DataType data; //数据域 Node<DataType>* next; //指针域 ​ Node<DataType>() { data = 0; next = nullptr; } }; ​ //构建一个单链表类 template<class DataType> class LinkList { private: Node<DataType>* head; //头结点 public: LinkList(); //构建 ~LinkList(); //销毁 void CreateLinkList(int n); //创建 void TraversalLinkList(); //遍历 int GetLength(); //获取长度 bool IsEmpty(); //判断是否为空 Node<DataType>* Find(DataType data); //查找节点 void InsertElemAtEnd(DataType data); //在尾部插入指定的元素 void

同样是线程安全,ConcurrentHashMap 和 Hashtable 区别?

无人久伴 提交于 2020-08-14 05:04:05
同样是线程安全,ConcurrentHashMap 和 Hashtable 区别? 文章目录 同样是线程安全,ConcurrentHashMap 和 Hashtable 区别? 前言 1.出现的版本不同 2.实现线程安全的方式不同 3.性能不同 4.迭代时修改的不同 5.总结 6.参考 前言 通过之前的文章 《HashMap 为什么线程不安全?》 ,我们都知道 HashMap 不是线程安全的,而本章中 ConcurrentHashMap 和 Hashtable 它们两个都是线程安全的,那它们有哪些不同点呢?我们从以下四个角度出发,去分析它们的不同点。 1.出现的版本不同 我们先从表面的、显而易见的出现时间来分析。Hashtable 在 JDK1.0 的时候就存在了,并在 JDK1.2 版本中实现了 Map 接口,成为了集合框架的一员。而 ConcurrentHashMap 则是在 JDK1.5 中才出现的,也正是因为它们出现的年代不同,而后出现的往往是对前面出现的类的优化,所以它们在实现方式以及性能上,也存在着较大的不同。 2.实现线程安全的方式不同 Hashtable 实现并发安全的原理是通过 synchronized 关键字,Collections.SynchronizedMap(new HashMap()) 的原理和 Hashtable 类似,也是利用

娱乐和商业的交叉路口,今年的618晚会谁赢了?

时光毁灭记忆、已成空白 提交于 2020-08-14 04:13:17
作者|谢明宏 编辑|李春晖 在被“买它买它买它”洗脑之前,古代的叫卖方式早已花样百出。《事物纪原》里写宋代:“京师凡卖一物,必有声韵,其吟哦俱不同。”带货主播的slogan,要标新立异才能杀出血路。 《鸡肋篇》里有个卖饼主播,叫卖只喊:“亏便亏我也!”这话一喊,势必引来群众围观。吃亏就让我一个人吃亏吧,这“壮士让利不复还”的架势,像极了今年的618电商价格战。 作为疫情以来的首个大型促销季,各大电商直接补贴消费者、加码价格战的策略明显。天猫,发放今年以来最大规模的现金消费券和补贴,预计超过100亿元。当满300减30变成减40,电商C位候选练习生的野心就写在脸上。 苏宁,以“J-10%省钱计划”剑指京东,在家电、手机、电脑等多类目商品比京东超级百亿补贴到手价至少再低10%,买贵就赔; 京东尽管拿出了2亿+件五折商品和京贴消费券,还是在天猫和苏宁的“价格围猎”下有些捉襟见肘。 遥想8年前,京东掌门雄姿英发,与苏宁立下赌局,一时风头无两。谈笑间,后发制人的苏宁在收购了万达百货和家乐福中国后,已经握住了“双东之争”的主动权。 特殊时期的购物节,消费者的心态其实也发生了微妙变化。简单粗暴的干吆喝不再吸引人,更温馨舒适的购物体验渐成趋势。这在场景化直播中,已经得到验证。苏宁的“超店播计划”将网红与店员组合,专业讲解和新奇体验收效甚佳。 今年的618晚会,事实上也成为各家电商此前直播带货

【无私分享:ASP.NET CORE 项目实战(第十四章)】图形验证码的实现

放肆的年华 提交于 2020-08-14 03:54:40
原文: 【无私分享:ASP.NET CORE 项目实战(第十四章)】图形验证码的实现 目录索引   【无私分享:ASP.NET CORE 项目实战】目录索引 简介      很长时间没有来更新博客了,一是,最近有些忙,二是,Core也是一直在摸索中,其实已经完成了一个框架了,并且正在准备在生产环境中试用,但是很多东西也是出于自己理解的肤浅和技术的不断更新,经常变动,所以,如果自己还没有完全搞好,就来写博客,反复的修正,可能会误导一些新手朋友。   如果有正在研究Core的朋友,可以大家一起交流下。 验证码         相信很多朋友跟我一样,图形验证码成为了 Core 的一个绊脚石。   System.Drawing.Primitives 这是官方的一个Drawing库,但是没有Bitmap、Graphics等很多东西,所以这个做图形验证码基本Pass了。   CoreCompat.System.Drawing 这个是一个第三方的, 使用了mono的System.Drawing实现,只要安装了之前使用System.Drawing的代码完全不用修改,也支持描画验证码等描画类的功能。 如果需要linux或osx支持,可以安装runtime.linux.CoreCompat.System.Drawing和runtime.osx.10.10-x64.CoreCompat.System

IDEA中创建maven web项目的详细部署

吃可爱长大的小学妹 提交于 2020-08-14 03:22:32
步骤一:首先先创建一个project,上次我说过了创建一个project就是一个工作空间,在这里就是创建一个maven的工作空间 步骤二:你要选择maven然后按照下面图片 的指示操作就可以了---》最后点击 next按钮 步骤三:如图: 步骤四:这里如何设置自己的maven的本地仓库的位置,是通过修改settings.xml中的文件的位置放置问题,还有你要加上阿里巴巴的仓库,这样你的下载速度就会加快,如果你不采用阿里巴巴的仓库,你要下载你需要的jar包的话,你就要通过FQ去下载,你的速度就会变慢,是某些包!!!! : 步骤五:你自己选择你自己的本地仓库的位置,至于如何设置本地仓库的位置,我在上一篇博客中有写到:你可以参考一下:http://www.cnblogs.com/1314wamm/p/7476199.html 步骤七:点击next 步骤八: 点击那个倒立的三角形,然后点击Edit Configurations; 步骤八: 步骤九:配置tocat服务器 步骤十:哎,发现,我怎么就只有一个选项呀, artifact这个选项怎么没有呢?不要着急,只要你不是下载的社区版本的IDEA就行了,你要查看你是不是下载的免费版的IDEA,如果是免费版的那就是阉割过的,有些查看时没有的,想要查看你的是那个版本的你可以点击上面一栏的help---->about就可以看到相应的版本了

Java基础-第04章:循环结构[云图智联]

元气小坏坏 提交于 2020-08-14 03:20:15
1. 什么是循环结构 1.1 为什么要学习循环结构   生活中,有很多“重复的去作某件事”的例子:旋转的钟表指针,滚动的车轮,日复一日的上课等等...同理,在程序中也有很多需要重复去执行的指令,比如现在要求我们输出100句“我爱java!”,按照之前的方式,我们可以这样来编写代码: public static void main(String[] args){ System.out.println("我爱java!"); System.out.println("我爱java!"); System.out.println("我爱java!"); //此处省略96行... System.out.println("我爱java!"); }   我们可以发现,用这种方式的确可以完成这件事,但好像也太笨太low了,并且如果现在又要求我们输出1万、1亿行,难道我们要把这条输出语句重复1万、1亿遍吗?显然这是不可能的。那应该怎么办呢?解决方案就是:使用循环结构! 1.2 循环结构的特点和组成 1.2.1 回到刚才的几个例子,我们来细品一下: 旋转的指针不会无条件的转下去,它必须要"有电";滚动的车轮也不会无休止的滚下去,车子必须要"有油";我们的课也不是天天都要上,前提是"今天不是周末或假期"...所以,我们可能总结出: 1.2.2 循环结构的共同点:   1.循环不是无休止进行的

在DBGrid中用代码实现按回车键跳到下一格的方法

时间秒杀一切 提交于 2020-08-14 02:21:36
示例: if Key = 13 then //回車後跳到下一格 with TDbgrideh(ActiveControl) do begin if Selectedindex < (FieldCount - 1) then Selectedindex := Selectedindex + 1 else begin dbgrideh.DataSource.DataSet.Next; Selectedindex := 0; end end; ———————————————— 来源: oschina 链接: https://my.oschina.net/u/4287583/blog/4281727

3par 划分磁盘

久未见 提交于 2020-08-14 02:16:43
1. 创建虚拟主机 create 1. 先点击左下角的 hosts 2. 依次点击 storage Systems imbbobcat02 host 然后 create host 3 配置 host 的名字 , 系统 ,ip 地址 , 然后点击 next 4. 在 linux 服务器上查询光纤端口 cd /sys/class/fc_host 然后 ls 查看两个端口 , 再 cat hostn/port_name 5. 再在 3par 管理器上面选取端口名字 5. 复制 multipath.conf 到 /etc 目录下 2. 创建虚拟卷 create virtual volume 1. 进入 3par 管理界面后 , 首先点击左下角的 provisioning( 准备 , 预备之意 ) 2. 然后右键点击 storage system 或者在其下的储存系统 , 选择 create virtual volume ( 创建虚拟卷 ) 3. 点击下面的 next 4. 配置 name, 选择 fully provisioned,size,user CPG 选择所用的磁盘阵列 , 最后点击 next 或者 finis 5. 在左侧点击 virtual volumes,by raid type, raid 1. 右键点击新创建的卷 demotest, 点击 export 然后选中左侧的

eureka源码系列

孤人 提交于 2020-08-14 02:15:57
eureka源码系列 - 配置类 @Author:zxw @email: 502513205@qq.com @school:吉首大学 1.前言 对于我们刚学习eureka入门教程的同学来说,最常做的就是在配置文件上填写eureka相关参数信息,然后配合一个注解就成功启动了eureka服务,所以了解eureka的配置文件相关参数以及默认值也是非常重要的,就让我们一起打开源码看看 2.面试题 最近我在面试一家公司的时候,因为简历上有写springcloud微服务的项目,所以也问了我一些eureka相关面试题,因为是应届生所以总的来说难度挺低。 eureka的尝试重连次数是多少 // --answer eureka的每隔多少秒会发送一次心跳 // --answer eureka满足CAP中的哪两个 // --answer 3.源码解析 话不多说,直接告诉你eureka的配置类为 EurekaClientConfigBean 该类实现了EurekaClientConfig和Order接口,在EurekaClientConfig接口中定义了一些获取字段值以及区域等其他方法。可以看到该类被 @ConfigurationProperties 注解修饰,如果我们有需要自定义yml配置的,也可以使用该注解修饰。 所使用的前缀为eureka.client,该值定义在PREFIX字段中 默认地址为: