数据结构与算法
文章平均质量分 57
Rhine404
Don't settle!
展开
-
43. 字符串相乘
43. 字符串相乘这个题算法的思路其实很简单,就是小学就学过的方法。对于num1=“123”、num2=“456”两个数来说,表示为如下 1 2 3 4 5 6--------- 7 3 8 6 1 54 9 2---------5 6 0 8 8通过这个方法,我们就将乘法转换为了加法运算。那么怎么把这个计算过程用程序的方式表示出来呢?设num1的长度为m,num2的长度为n。(1)那么我们可以开辟一个O(nm)大小的空间,存储所有需要加起来的字符串,将它们逐原创 2021-10-28 00:26:07 · 362 阅读 · 0 评论 -
11. 盛最多水的容器
11. 盛最多水的容器首先想到的就是暴力算法,遍历整个二维数组,将i与i-1…i-n依次求值,求得最大值。此算法时间复杂度为O(n^2),空间复杂度为O(1)。那么有没有办法降低时间复杂度呢?这个题如果第一次做,想不到解法很正常,只能靠一些过去的刷题经验,即这样的数组问题通常使用双指针解决。class Solution { public int maxArea(int[] height) { int result = 0; int left = 0;原创 2021-10-21 00:05:13 · 319 阅读 · 0 评论 -
9.回文数
9. 回文数这个题虽然是简单题,但也是从最朴素的思路出发,再进行优化。读题后首先想到的是,将输入数值x转换为字符串,然后再利用双指针,从左右端点往中间收缩,两两比较,判断是否为回文字符串。如果是回文字符串,则必然是回文数。第一次提交class Solution { /** * 时间复杂度O(n) 空间复杂度O(n) */ public boolean isPalindrome(int x) { if (x < 0) return false;原创 2021-10-19 23:38:19 · 299 阅读 · 1 评论 -
7.整数反转
题目:整数反转class Solution { public int reverse(int x) { int neg = x < 0 ? -1 : 1; x *= neg; int ret = 0; while (x > 0) { int temp = ret; temp *= 10; temp += x%10; if (te原创 2021-10-19 08:55:44 · 156 阅读 · 0 评论 -
最长回文子串
0 题目5.最长回文子串1 分析这个问题是找字符串s中是回文字符串的子串,为了循序渐进的理解,我们先从最基本的问题出发:让判断一个字符串s是不是一个回文串?这个问题比较简单,可以有两种解法:(1)两端收缩从字符串的两端往中间收缩,两两比较。需要确定左右两个端点。(2)中心扩散从字符串中间位置开始,往两端扩散,两两比较。需要计算中点。一般我们会使用两端收缩这种办法,因为左右端点是确定的。但在最长回文子串这个题目中,使用两端收缩就行不通了,长度为n的字符串,我们需要n次遍历,并且在每个位置上需原创 2021-10-17 17:56:43 · 250 阅读 · 0 评论 -
Trie树及其优化
介绍Trie树及Double Array Trie优化原创 2021-10-10 17:10:32 · 1721 阅读 · 1 评论 -
求平均数防止溢出
求a与b的平均数,如何做到防溢出,并利用移位运算优化计算过程。原创 2018-12-17 17:53:08 · 1688 阅读 · 4 评论