力扣
PanDawson
上海海洋大学软件工程学生
展开
-
力扣 1.两数之和
在该题中 很容易想到用暴力法来解决直接进行n^2次寻找此时 时间复杂度很高 而要降低时间复杂度 即减少查询次数可以用hashmap 存储num[i] i降低了寻找可能存在的对应数字的次数Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i...转载 2020-01-03 09:50:30 · 469 阅读 · 0 评论 -
力扣 160 相交链表——双指针解法
如果两个链表相交,那么相交点之后的长度是相同的我们需要做的事情是,让两个链表从同距离末尾同等距离的位置开始遍历。这个位置只能是较短链表的头结点位置。为此,我们必须消除两个链表的长度差指针 pA 指向 A 链表,指针 pB 指向 B 链表,依次往后遍历如果 pA 到了末尾,则 pA = headB 继续遍历如果 pB 到了末尾,则 pB = headA 继续遍历比较长的链表指针指向较...转载 2019-12-24 10:41:48 · 275 阅读 · 0 评论 -
力扣 169求多数元素——投票法
官方解法中有一个值得学习的投票法方法 6:Boyer-Moore 投票算法想法如果我们把众数记为 +1+1 ,把其他数记为 -1−1 ,将它们全部加起来,显然和大于 0 ,从结果本身我们可以看出众数比其他数多。算法本质上, Boyer-Moore 算法就是找 nums 的一个后缀 sufsuf ,其中 suf[0]suf[0] 就是后缀中的众数。我们维护一个计数器,如果遇到一个我...转载 2019-12-18 09:19:55 · 191 阅读 · 0 评论 -
力扣9 回文数
判断数字是否是回文数我自己的解法:借助了String转化为char[] 然后前后指针判断官方解法:不借助String的情况先 ,原地解决问题—— 就用数字的后半段和前半段进行对比巧妙之处在于:避免了int溢出的问题(如果用整个int 倒转了 就有可能)同时 加上 0 <0 的条件判断在空间和时间上都非常优秀的解法...原创 2019-12-14 15:29:00 · 195 阅读 · 0 评论 -
力扣 231 2的幂
题目要求 给出一个int 看是否是2的幂 即 2^? 能否 == int值自己解法:利用取模mod 的底层表示 n & (2-1) + 逐次/2 , 取mod值 != 0 时可以返回 false别人解法:1. 值一定是 正值2.2次幂的底层表示其实是 100...00 即 1 后面都是0那么就可以用 n & (n-1) 来判断 —— 和mod的底层思想十...原创 2019-12-12 21:16:26 · 200 阅读 · 0 评论 -
力扣 20.有效的括号
就是能否匹配完整的括号()【】{}我自己一开始的解法是 直接用数组和一个“指针”(其实是int 指向top位置)模拟栈的结构+最后跑完看top的位置(不为-1 的话就是return false)官方解法 也是用栈但是没有想到的点:1.因为其实是一一对应的 并且是 有前后关系的例如:遇到“ )”才去栈顶中找“ (”因此 是可以用HashMap存储键值对的 key 是 ...原创 2019-12-11 22:13:21 · 172 阅读 · 0 评论 -
力扣 7.整数翻转
将整数翻转,溢出的话返回0题目理解:1.应用数学方式解决,即逐个数字拆解,然后*10,而不是用字符串的翻转方式处理,因为效率太低2.提前一步进行溢出判断——和 最大值2^31 -1 以及 -2^31 两数进行判断因为是*10 所有比较的是 MAX / 10 以及 MIN / 10...原创 2019-12-09 21:55:03 · 156 阅读 · 0 评论 -
反转字符串——双指针
一开始我自己固有的思维是 只用一个“指针”也就是寻常的for(int i = 0;i<=(length>>2);i++)但后面提交的时候会出现问题——过度交换了因为for(int i = 0 ; i <= (length>>2) ; i++){ temp = s[i]; s[i]...原创 2019-11-27 09:55:20 · 561 阅读 · 0 评论 -
第一次体验到String 和 StringBuilder 进行字符串拼接 所消耗时间的差异
leetcode 557 时 第一次用String 超时或者 1800ms 而改用 StringBuilder 后8ms差异巨大。而且众所周知 String 进行+= 字符串拼接时 底层用的就是StringBuilderStringBuilder有 deleteChatAr 和 reverse 方法提供便利...原创 2019-11-25 11:22:50 · 134 阅读 · 0 评论 -
LeetCode 两数相加
一开始的解法:用字符串拼接的方式拼成完整的数 ,然后直接转换为int对比官方解法:逐个位对应相加 并记录进位我解法的问题:String 直接转换为 Int 的时候 int溢出的问题(int的表达范围只有-2^31——2^31-1,即-2147483648——2147483647)因此避免这种问题 ,由题目也可知,直接对应位置加,更好要注意的是 两链表长度不一样的...原创 2019-11-25 11:23:40 · 184 阅读 · 0 评论