阿亮专题

阿亮的算法之路——9. 回文数

题目描述 题目难度简单,emm,按暴力来做的话,思路是比较简单。 初次尝试 我一开始,想到的就是用字符串来做,先将这个数字转成字符串,然后再进行判断,可能是平时字符串用得比较多,所以第一时间会想到用字符串。 但可能,将其转换成字符串,还不如不转效率更高,当然只是推测,类似的,可以看我的这篇博客:阿亮的算法之路——7. 整数反转 但题目的进阶要求:是否可以不将这个整数转成字符串来解决问题

阿亮的算法之路——14. 最长公共前缀

题目描述 按照直觉应该不难,不就是遍历,然后挨个比较是否相等嘛,话不多说,直接开始写代码,然后再调试边界情况。 首次尝试 我的思路是:两层for循环,外层控制每个字符串第几个字符,内存控制是第几个字符串。但是问题就来了,外层在控制第几个字符的时候,边界不好确定,按道理是字符数组中最短的那个字符串,但是那样的话,就以为着需要多遍历一次,多这一次遍历,就纯粹的是为了找到最短的那个字符串,我觉

阿亮的算法之路——121买股票的最佳时机

题目描述 这题被归纳为了动规,但好像往动规的方向思考,没有思路,索性用原始一点的方法 首次提交 代码 public static int maxProfit(int[] prices){int len ;if (prices == null || (len = prices.length) == 0) { return 0; }int min = prices[0];int dif

阿亮的算法之路——11. 盛最多水的容器

题目描述 看起来挺复杂的,要考虑宽度、长度,还要考虑之前是否就已经存在最大的容量了。 首次尝试 是有点复杂,但如果用暴力,就很简单,思路简单,代码更简单。我一开始是想着用效率高一点的方式来做的,但想了好一会而也没有思路,所以决定先用暴力的方法做出来。 一写代码,发现暴力破解如此的简单:双层循环,从头开始遍历,每遍历到一个数,就从头遍历到当前位置,用一个变量记录最大的容量,遍历完成就ok

阿亮的算法之路——343整数拆分

动态规划集中练习 题目详情 自己思考 看到这个题目,会想到用动态规划来做,但是我在想,可不可以用一种统一的思想来解决这个问题呢?类似的,比如给定一个周长,求围成面积最大的图形,那一定是园,将各个方向都崩得最大。 我觉得这个题和求面积最大的图形那个题很类似,那这个题的思路肯定也是,将拆分的个数和每一个数的大小都要最大。经过多次尝试,都不行,因为,要拆分成整数,就无法很好的同时兼顾,比如1

阿亮的算法之路——198. 打家劫舍

集中练习动态规划的题目。 题目描述 题目链接:https://leetcode-cn.com/problems/house-robber/ 解题 看了一遍题目之后,我知道这个题目是那种当前状态需要由前面的状态来确定的题目,也就是用动态规划,但是我不知道状态怎么确定,怎么写状态转移。 本着先完成,后完美的想法。我决定先用自己的思路做一遍,不用动态规划,然后我就思考用最笨的办法来做 一往这个

阿亮的算法之路——7. 整数反转

题目描述 这题难度是简单,的确是这样。 首次尝试 思路 其实我一开始想到了移位,因为进行移位运算,效率更高,但是没不知道要怎么移位,或者说移位能不能实现,所以就用了最笨的办法,先实现功能。 要将一个数反转,计算出他的位数,然后再依次取出每一位,乘以相应的位权即可,最后求和。 例如:12,首先计算出它又两位,然后,取出2 乘以 10(2-1),再取出1乘以10(2-2),最后将其求和

阿亮的算法之路——279完全平方数

动态规划集中练习 题目详情 自己尝试 因为是动态规划的集中练习,所以第一思路就是用动态规划去做。其实这种后面的会受到前面的影响的题,大都会第一想到动态规划。 这题我想了一会儿,有了大概的思路, 思路就是: 状态转移:当前n的最小次数= 所有可以组成n的两个整数的最小次数的和中最小的 第一次代码 public static int numSquares(int n ){int

阿亮的算法之路——213. 打家劫舍 II

动态规划集中练习 题目描述 题目链接:https://leetcode-cn.com/problems/house-robber-ii/ 解题思路 动态规划的典型题目,是上一个打家劫舍 题目的升级版,不同的是,上一个是一个单链,这个是一个环形。其实核心都是动态规划,但是就算上一个题会做,这个题也不一定会做,这里还有一点需要考虑和处理。(当然方法可能不止一种), 如果以上来就考虑:环形的怎

阿亮的算法之路——8. 字符串转换整数 (atoi)

题目描述 这题目难度被归为了中等,但其实我觉得没那么难,当然,我指的是用暴力方法。无非就是判断一下,然后将其拼成一个数字。 首次尝试 按着思路来,将这个字符串转成一个字符数组,先判断第一个字符,正负号、数字或是其它,然后再往后依次判断后面的字符,将满足要求的数字放在一起,最后将其转成一个数字返回即可 public static int myAtoi(String str){if (s

阿亮的算法之路——2. 两数相加

题目描述 我一开始的思路是:遍历这两个链表,将这两个数还原回去,然后做运算,将运算完的结果再按照要求逆序取出来,做成一个链表。实际上应该是可行的, 初次尝试 但是: 我还原回去的数用了一个int类型的变量来接收,但是当第1559个用例时,这个还原回去的数就已经超过了int类型了……迫于无奈,我将类型换成了long类型,我想着这下应该够了把,结果: 第1560个用例,直接来了这么长,好像有

阿亮的算法之路——5. 最长回文子串

题目详情 题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/ 初次完成 老规矩,确保自己的第一思路能先完成功能。反正是各种运行调试,有问题就debug public String longestPalindrome(String s){String maxSubstr = "";int in;a

阿亮的算法之路——6. Z 字形变换

题目描述 看到题目就觉得有戏,看起来复杂了一点,但是凭我的感觉,这题用暴力是比较容易做的,只是可能比较繁琐。 z型变换,实际上是n型,不过都无所谓,我用一个二维数组往里一套,后面再遍历拼接成字符串,就OK了。只是在往二维数组里放值的时候,条件不容易控制,需要慢慢找规律。 自己尝试 思路 因为需要慢慢找规律,所以我在草稿纸上画了一下图: 就是字符串的每个字符索引,与这个字符被放入二维数组

阿亮的算法之路——12. 整数转罗马数字

题目描述 一开始看到这题,想到的是动态规划、递归等,但是边想边写搞了半天,好像都不大好实现,索性来个简单的,大数字不就是由小数字起来的吗? 首次尝试 那我就搞个死循环,挨个的判断,由大到小,这个数如果大于等于1000,就给需要返回的字符串拼接一个“M”,然后将这个数字减去1000……直到最后这个数等于0,就将字符串返回。 public static String intToRo

阿亮的算法之路——13. 罗马数字转整数

题目描述 第十二题的逆过程,还是比较简单的。 初次尝试 也是通过从高位开始往下匹配,匹配成功一个,就将这个数加相应的值,然后再匹配下一个字符。需要注意的是,匹配字符的时候,有的字符是两个同时匹配的,所以需要确定先匹配两个还是一个。 public static int romanToInt(String s){int[] nums = {1000, 900, 500, 400,

阿亮的算法之路——122. 买卖股票的最佳时机 II

题目描述 题目连接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/ 一开始看到这个题目的时候,有点不知从何下手。想到了动态规划,当前可以获取的最高价格,可以从当前的价格和前几个可以获得的最高价格产生练习,但是我又想到了:万一后面的某个数很大,需要用这个最大的数去减去最小的那个数呢?那岂不是又要倒回去找最小

阿亮的算法之路——3. 无重复字符的最长子串

前言 非科班,没学过数据结构与算法,但想在这方面有所提升。在不耽误正式课程的学习下,先从简单的做起,尽可能的每天做一道算法题(鉴于做算法题太花费时间,改为一周三道)。原则上先完成后完美,以先满足需要,实现功能为目的,然后再进行优化,查看解析、查看大佬的思路。 题目详情 题目链接:https://leetcode-cn.com/problems/longest-substring-with

阿亮的白露为霜

朋友拿到的白露勋章