算法
平时做的算法题总结
街上人
小小的coder
展开
-
算法 — easy —爬楼梯(dp[i] = dp[i-1] + dp[i-2])
一开始想到的是分类列举,那可太麻烦了,但是看到评论区的hxd居然真的有列举法的,给出的理由是当台阶数到达46,会出现溢出;所以列举出了45种情况哈哈哈哈列举方法:public int climbStairs(int n) { int result = 0; switch(n){ case 1: result = 1; break; case 2: result = 2; break; case 3: result = 3; break; .原创 2020-11-19 11:11:35 · 453 阅读 · 0 评论 -
算法 — easy —最后一个单词的长度,加一,二进制相加
一. 最后一个单词的长度分析:字符串可能是 “Hello World”,“ Hello World”,“Hello World ”,“ Hello World ”,首尾不一定有空格,所以在处理字符串的时候,先把首尾字符串去掉,使用trim()函数,然后将字符串根据空格分割成字符串数组,使用split()函数代码class Solution { public int lengthOfLastWord(String s) { if(s.length() == 0)原创 2020-11-18 10:17:49 · 162 阅读 · 0 评论 -
算法 — easy — 最大子序和
最开始想到的是暴力拆解,找出所有子序然后求出最大和,但是时间复杂度很大;然后网上搜索了一下看到了用动态规划法,贪心法和分治法等。我看了一些源码,用了动态规划法的思想。其实这是找出收益的问题,假如持续是正收益,那就可以一直加下去,假如变为负收益,那就重新开始;每一次的相加都必须比较最大值。我也是借鉴某位大佬的代码,最精巧的地方就是这位大佬设置了 sum = 0 这道门槛代码class Solution { public int maxSubArray(int[] nums) { .原创 2020-11-17 10:57:46 · 130 阅读 · 0 评论 -
算法 — easy —搜索插入位置
这道题目还是得注意索引下标index,我在上面经常出错代码class Solution { public int searchInsert(int[] nums, int target) { int index; for(index = 0; index < nums.length-1; index++) if(nums[index] == target) return index; .原创 2020-11-17 09:41:39 · 173 阅读 · 0 评论 -
算法 — easy —实现strStr()
这道题目我采用的是substring()函数和equals()函数,特别需要注意substring()函数截取字符的起始和末尾位置。思路是制定index指针,在haystack中截取needle字符,只要截取到,就返回index参考这篇文章https://blog.csdn.net/qq_39445165/article/details/83651114代码class Solution { public int strStr(String haystack, String needle.原创 2020-11-17 09:22:14 · 102 阅读 · 0 评论 -
算法题 — easy — 移除数组中重复的元素
分析:利用双指针。后记 i 指针循环遍历整个数组,前记 index 指针标注跟 val 相同的数组元素。其实**原理是当前记指针和后记指针指向元素不相等的话,前记指针和后记指针都移动,那么就是在相同位置上的赋值;相等的话,就只是后记指针在移动,后记指针指向的值就会赋值给前记指针**val 跟后记指针 i 作比较假如指向元素相同,则后记指针 i 后移假如不相同,则后记指针 i 指向的值赋值给前记指针 index 指向的值,前记指针 index 和后记指针 i 都后移一位代码class Sol..原创 2020-11-16 15:26:50 · 91 阅读 · 0 评论 -
算法题 — easy — 删除排序数组中的重复项
看了网上很多解析,都是使用的双指针,但是我自己使用的双指针跟大佬们的不一样,虽然代码量很少,但是时间复杂度很高…分析:设定 i 指针循环遍历整个数组,j 指针用于往前复制数组元素i 指针比对前后两个元素,若相同则启动 j 指针遍历循环使得数组元素前移考虑的是当数组完成数组前移后, i 指针应该归位(i-- 和 i++)指向上次遍历的位置当 i 指针到最大数值的时候,数组末尾全都是该数,不处理会使得遍历死循环,所以增加判断条件,当 i 指针指向的值跟数组最后一个值相等,那就退出遍历循环代码..原创 2020-11-16 14:07:43 · 69 阅读 · 0 评论 -
算法题 — easy —合并两个有序链表
一. 链表大学本科阶段就对链表比较头疼,没有理解透彻,做题目的时候就比较吃力,链表有很多类型,单链表、双链表、循环链表和双向链表等,操作也有很多,插入、删除和排序等,其实只要理解了节点的数据结构,问题就迎刃而解了。节点由数据和指针(next)构成,在对节点操作的过程中,会有一个虚拟的指针(并不是节点中的next)指向节点。二. 题目分析:两个有序链表,结点都是由一个数据和一个next指针构成。可以先创建一个空结点 pre,因为当完成两个链表后,preHead的指针next指向null,所以需要在原创 2020-11-16 11:43:06 · 68 阅读 · 0 评论 -
算法题 — easy — 有效的括号
一. 栈LIFO(后进先出),其限制是仅允许在表的一端进行插入和删除运算。栈具有push()、pop()(返回栈顶元素并出栈)、peek() (返回栈顶元素不出栈)、isEmpty()等基本的方法二. 题目:有效的括号最开始想到的就是蛮力法,暴力分解字符串,然后从中间开始对比两个字符串,但是实现起来代码量很多1. replace()函数根本没想到replace()函数可以用到这道题目,只要在字符串中找到设定的字符就直接替换成空字符,最后字符串的长度就会为0。代码看起来很简单,但是运行起来的时间原创 2020-11-15 22:44:22 · 118 阅读 · 0 评论 -
算法题 — easy —最长公共前缀
看了网上很多大神的解析,python调用zip模块就很快算出来了,我用Java编写了四十行代码…题目解析:字符串数组中没有元素,就返回空字符串,字符串数组只有一个元素,返回这个元素字符串数组有两个元素,循环对比字符串数字有三个及以上元素,将前两个字符串产生的最长前缀跟后面的字符串进行对比错误代码虽然运行出来了,但是检查的时候报错了。用的方法是charAt()函数,逐个字符进行比对,但是会把不相邻的字符拼凑在一起,最长前缀需要的是相邻的字符class Solution { pub.原创 2020-11-15 16:14:52 · 155 阅读 · 0 评论 -
算法题 — easy — 两数之和,整数反转,回文数,罗马数字转整数
一. 前言已经本科毕业了,才开始弄leetcode,说实话比较晚了,接下来我会一直每天做几道算法题,充实自己的知识点。二. 两数之和这是easy类型的第一道题,我居然花了半个小时,其实用idea几分钟就写出来了,但是在leetcode网页界面搞了半天,第一次接触这个界面,我鼓捣了半天,发现没有main主函数也可以编译,自动给你输入数值,传递给实参。class Solution { public int[] twoSum(int[] nums, int target) { i原创 2020-11-15 13:23:50 · 181 阅读 · 0 评论