暂时未有相关云产品技术能力~
Java小包子
在我们之前的业务中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求去修改原代码!如果程序代码量十分大,修改一次的成本代价十分昂贵! 这种思想,从本质上解决了问题,我们程序猿不用再去管理对象的创建了。系统的耦合性大大降低~,可以更加专注的在业务的实现上!这是IOC的原型!
请谈谈你对JVM的理解? java8虚拟机和之前的变化更新? - 什么是OOM,什么是栈溢出StackOverFlowError? 怎么分析? - JVM的常用调优参数有哪些? - 内存快照如何抓取,怎么分析Dump文件? - 谈谈JVM中,类加载器你的认识
和上一道可以说是一个问题,只不过这个是给一个已经合并好的列表,然后给一个新的节点依据规则加入到合并好的列表。 解法一 对应 56 题的解法一,没看的话,可以先过去看一下。这个问题其实就是我们解法中的一个子问题没看的话,可以先过去看一下。这个问题其实就是我们解法中的一个子问题, 所以直接加过来就行了
常规的思想,将大问题化解成小问题去解决。 假设给了一个大小为 n 的列表,然后我们假设 n - 1 个元素的列表已经完成了全部合并,我们现在要解决的就是剩下的 1 个,怎么加到已经合并完的 n -1 个元素中。 这样的话分下边几种情况, 我们把每个范围叫做一个节点,节点包括左端点和右端点。 1. 如下图,新加入的节点左端点和右端点,分别在两个节点之间。这样,我们只要删除
在 leetcode 的 solution 和 discuss 看了下,基本就是这个思路了,只是实现上有些不同,怎么用来标记是否走过,当前方向,怎么遍历,实现有些不同,但本质上是一样的。就是充分理解题意,然后模仿遍历的过程。
时间复杂度:两层 for 循环,再加上比较字符串,如果字符串最长为 K,总的时间复杂度就是 O(n²K)。 空间复杂度:O(NK),用来存储结果。 解法一算是比较通用的解法,不管字符串里边是大写字母,小写字母,数字,都可以用这个算法解决。这道题的话,题目告诉我们字符串中只有小写字母,针对这个限制,我们可以再用一些针对性强的算法。 下边的算法本质是,我们只要把一类的字符串用某一种方法唯一的映射到同一个位置就可以。
时间复杂度:O(n)。 空间复杂度:O(1)。 这里要注意一个细节,就是 for 循环中,i < nums.length - 1,少了末尾。因为开始的时候边界是第 0 个位置,steps 已经加 1 了。如下图,如果最后一步刚好跳到了末尾,此时 steps 其实不用加 1 了。如果是 i < nums.length,i 遍历到最后的时候,会进入 if 语句中,steps 会多加 1 。
也就是红色区域中的水, 数组是 height = [ 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1 ] 。 原则是高度小于 2,temp ++,高度大于等于 2,ans = ans + temp,temp = 0。 temp 初始化为 0 ,ans 此时等于 2。 height [ 0 ] 等于 0 < 2,不更新。 height [ 1 ] 等于 1 < 2,不更新。 height [ 2 ] 等于 0 < 2, 不更新。 height [ 3 ] 等于 2 >= 2, 开始更新 height [ 4 ] 等于 1 < 2,temp = temp + 1 = 1。 h
第二种思路,参考这里。 我们开始更新 start 的时候,是 mid + 1,如果剩两个元素,例如 2 4,target = 6 的话,此时 mid = 0,start = mid + 1 = 1,我们返回 start + 1 = 2。如果 mid 是右端点,那么 mid = 1,start = mid + 1 = 2,这样就可以直接返回 start 了,不需要在返回的时候加 1 了。
这几种算法,暴力破解和动态规划我觉得想的话,还是能分析出来的话,最后两种算法感觉是去挖掘题的本质得到的算法,普适性不是很强。但最后一种算法,从左到右,从右到左,是真的强。
如上图,利用循环变量 i ,依次后移,判断每个子串是否符合即可。 怎么判断子串是否符合?这也是这个题的难点了,由于子串包含的单词顺序并不需要固定,如果是两个单词 A,B,我们只需要判断子串是否是 AB 或者 BA 即可。如果是三个单词 A,B,C 也还好,只需要判断子串是否是 ABC,或者 ACB,BAC,BCA,CAB,CBA 就可以了,但如果更多单词呢?那就崩溃了。 链接)的作者提出了,用两个 HashMap 来解决。首先,我们把所有的单词存到 HashMap 里,key 直接存单词,value 存单词出现的个数(因为给出的单词可能会有重复的,所以可能是 1 或 2 或者其他)。然后扫描子
上边的解法,我们是如果不等于 val 就赋值。但如果按题目的想法,应该是如果等于 val 就移除。我们从正方面去想,也就是等于 val 的话,我们怎么体现移除呢? 题目中有个说明我们没利用到,他告诉我们说 the order of those five elements can be arbitrary,就是说数组的顺序可以随便换,我们怎么充分利用呢? 我们可以这样,如果当前元素等于 val 了,我们就把它扔掉,然后将最后一个值赋值到当前位置,并且长度减去 1。什么意思呢? 比如 1 2 2 4 6,如果 val 等于 2 。那么当移动到 2 的时候,等于 val 了。我们就把最后一个位置的
参考了这里-Java-solution) 主要思想是,遍历数组,用 0 减去当前的数,作为 sum ,然后再找两个数使得和为 sum。 这样看来遍历需要 O(n),再找两个数需要 O(n²)的复杂度,还是需要 O(n³)。 巧妙之处在于怎么找另外两个数。 最最优美的地方就是,首先将给定的 num 排序。 这样我们就可以用两个指针,一个指向头,一个指向尾,去找这两个数字,这样的话,找另外两个数时间复杂度就会从 O(n²),降到 O(n)。 而怎么保证不加入重复的 list 呢? 要记得我们的 nums 已经有序了,所以只需要找到一组之后,当前指针要移到和当前元素不同的地方。其次在遍
我们理一下思路,大小是由长度和高度决定,如果选 0 到 8 就保证了长度最长,此时大小是 0 号柱子的高度 1 乘以长度 8 。我们如果想面积更大怎么做呢,只能减小长度,增加高度。是左边的柱子向右移动变成 1 号柱子呢?还是右边的柱子向左移动变成 7 号柱子呢?当然是哪边的柱子短就改哪边的!只有这样,高度才有可能增加。 例如我们如果把 8 号柱子变成 7 号柱子,此时长度减少了,然而高度还是 0 号柱子没有变化,所以面积就会减少。把 1 号柱子变成 2 号柱子就很好了,因为此时高度就变成了 8 号柱子的高度,面积就有可能会增加。 如果左右两边柱子相等该怎么办呢?随意! 我们假设 1 号
上边的递归,为了方便理解,简化下思路。 为了判断 text [ 0,len ] 的情况,需要知道 text [ 1,len ] 为了判断 text [ 1,len ] 的情况,需要知道 text [ 2,len ] 为了判断 text [ 2,len ] 的情况,需要知道 text [ 3,len ] ... 为了判断 text [ len - 1,len ] 的情况,需要知道 text [ len,len ] text [ len,len ] 肯定好求 求出 text [ len,len ] 的情况,就知道了 text [ len - 1,len ] 求出 text [ le
在第 7 道题我们写了倒置 int 的算法,这里当然可以用到了,只需要判断倒置前后相不相等就可以了。 记不记得,当倒置后的数字超出 int 的范围时,我们返回的是 0 ,那么它一定不等于原数,此时一定返回 false 了,这正不正确呢? 我们只需证明,如果倒置后超出 int 的范围,那么它一定不是回文数字就好了。 反证法,我们假设存在这么一个数,倒置后是超出 int 范围的,并且它是回文数字。 int 最大为 2147483647 ,
将一个字符串转为整型。 这道题,难度其实不大,和上道题有很多重合的地方。整体的思路就是遍历字符串,然后依次取出一个字符就可以了。无非是考虑一些特殊情况,还有就是理解题目意思。 经过多次试错,题目的意思是这样的。 从左遍历字符串,可以遇到空格,直到遇到 ' + ' 或者数字或者 ' - ' 就表示要转换的数字开始,如果之后遇到除了数字的其他字符(包括空格)就结束遍历,输出结果,不管后边有没有数字了,例如 " - 32332ada2323" 就输出 "- 32332"。 如果遇到空格或者 ' + ' 或者数字或者 ' - ' 之前遇到了其他字符,就直接输出 0 ,例如 " we1332"。
就目前来说,大部分企业已经实现云服务。但就学习者来说,云服务国内常见的厂商华为云、腾讯云、阿里云、新浪云等等各种云都是需要收费的,尽管某些厂商提供免费试用产品,可到期就要付费!你能想象,刚用舒爽,给你来个“对不起,体验服务已到期,请续费!”。白嫖者的噩耗啊 所以我们的VMware就给咱提供了一个相对舒爽的学习环境(咱用VMware station player,更全面的pro违背了互联网的核心宗旨!对了win10专业版是拥有Hyper-V,有兴趣的同学可以尝试一下啊),同学们在实际的操作中习惯使用xshell、putty这种远程链接工具,通过保存服务配置,但是咱虚拟机的IP是动态分配的,一不
此方法返回这个字符串的指定索引处的char值。第一个char值的索引为0. 5.异常 IndexOutOfBoundsException -- 如果index参数为负或不小于该字符串的长度. 6.实例
我们可以看到,图形其实是有周期的,0,1,2 ... 7 总过 8 个,然后就又开始重复相同的路径。周期的计算就是 cycleLen = 2 × numRows - 2 = 2 × 5 - 2 = 8 个。 我们发现第 0 行和最后一行一个周期内有一个字符,所以第一个字符下标是 0 ,第二个字符下标是 0 + cycleLen = 8,第三个字符下标是 8 + cycleLen = 16 。 其他行都是两个字符。 第 1 个字符和第 0 行的规律是一样的。 第 2 个字符其实就是下一个周期的第 0 行的下标减去当前行。什么意思呢? 我们求一下第 1 行第 1 个周期内的第 2 个字符
遗憾的是上边的算法没有通过 leetCode,时间复杂度太大,造成了超时。我们怎么来优化一下呢? 上边的算法中,我们假设当 i 取 0 的时候, j 取 1,判断字符串 str[0,1) 中有没有重复的字符。 j 取 2,判断字符串 str[0,2) 中有没有重复的字符。 j 取 3,判断字符串 str[0,3) 中有没有重复的字符。 j 取 4,判断字符串 str[0,4) 中有没有重复的字符。 做了很多重复的工作,因为如果 str[0,3) 中没有重复的字符,我们不需要再判断整个字符串 str[0,4) 中有没有重复的字符,而只需要判断 str[3] 在不在 str[0,3)
首先每一位相加肯定会产生进位,我们用 carry 表示。进位最大会是 1 ,因为最大的情况是无非是 9 + 9 + 1 = 19 ,也就是两个最大的数相加,再加进位,这样最大是 19 ,不会产生进位 2 。下边是伪代码。 初始化一个节点的头,dummy head ,但是这个头不存储数字。并且将 curr 指向它。 初始化进位 carry 为 0 。 初始化 p 和 q 分别为给定的两个链表 l1 和 l2 的头,也就是个位。 循环,直到 l1 和 l2 全部到达 null 。 设置 x 为 p 节点的值,如果 p 已经到达了 null,设置 x 为 0 。 设置 y 为 q 节点的值,如果
链表的优点和缺点: 优点:因为链表上的元素在空间存储上内存地址不连续,所以随机增删元素的时候不会有大量元素位移,因此随机增删效率高。在以后的开发中如果有大量的增删集合中的元素时,建议使用LinkedList 缺点:不能通过数学表达式的计算查找元素的内存地址,每一次查找都是从头开始遍历,所以LinkedList的查找效率比较低。
虚拟化技术是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。一般所指的虚拟化资源包括计算能力和数据存储。
在win10 系统中的虚机软件VMware Workstation中安装CentOS7,安装过程中没有设置网络,等安装完后才设置的(其实这个没有影响)。后来发现死活都是“有线线缆被拔出”。 解决问题的道路是艰辛的,特别是linux系统的问题。 1.确认你win10系统打开了这两个服务:VMware DHCP Service和VMware NAT Service
使用注解的优势: 1.采用纯java代码,不在需要配置繁杂的xml文件 2.在配置中也可享受面向对象带来的好处 3.类型安全对重构可以提供良好的支持 4.减少复杂配置文件的同时亦能享受到springIoC容器提供的功能 @SpringBootApplication 一般不会主动去使用它,但是要知道它是一个组合注解,@Configuration 、@EnableAutoConfiguration 、@ComponentScan 注解的集合 @SpringBootApplication:申明让spring boot自动给程序进行必要的配置,这个
Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的Lambda ,给我们操作集合(Collection)提供了极大的便利。Stream流是JDK8新增的成员,允许以声明性方式处理数据集合,可以把Stream流看作是遍历数据集合的一个高级迭代器。Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找/筛选/过滤、排序、聚合和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供