算法基础
文章平均质量分 50
阿乐246
这个作者很懒,什么都没留下…
展开
-
LeetCode 73.矩阵置零
public void setZeroes(int[][] matrix) { int m=matrix.length; int n=matrix[0].length; boolean[] row=new boolean[m]; boolean[] col=new boolean[n]; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(matrix[i][j]==0){原创 2021-07-09 10:16:54 · 282 阅读 · 3 评论 -
LeetCode 70.爬楼梯
一、题目详情假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意: 给定 n 是一个正整数。示例:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶二、思路设f(n)为爬n阶楼梯的方法,根据我们最后一步迈1个还是2个台阶,很容易得到f(n)=f(n-1)+f(n-2)。这就是个斐波那契数列的问题呀,初始值f(1)=1,f(2)=2。我们可以直接采用递归的方法:publi原创 2021-07-08 09:24:16 · 158 阅读 · 0 评论 -
LeetCode 65.有效数字
一、题目详情有效数字(按顺序)可以分成以下几个部分:一个 小数 或者 整数(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数小数 (按顺序)可以分成以下几个部分:3. (可选)一个符号字符(’+’ 或 ‘-’)4. 下述格式之一:1. 至少一位数字,后面跟着一个点 ‘.’2. 至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字3. 一个点 ‘.’ ,后面跟着至少一位数字整数 (按顺序)可以分成以下几个部分:(可选)一个符号字符(’+’ 或 ‘-’)至少一位数字原创 2021-07-07 11:43:25 · 271 阅读 · 0 评论 -
LeetCode 57.插入区间
一、题目详情给你一个 无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例:输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输出:[[1,5],[6,9]]二、思路将新区间newInterval与区间列表intervals中的区间依次比较,如果可以合并就合并区间。如果不能合并,就判断newInterval是在intervals[i]的左侧还是右侧。原创 2021-07-06 12:36:46 · 127 阅读 · 0 评论 -
LeetCode 56.合并区间
一、题目详情以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].二、思路如果采用双层循环去比较每两个区间,再决定是否原创 2021-07-03 11:16:11 · 145 阅读 · 1 评论 -
LeetCode 28.实现strStr()
一、题目详情实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。示例:输入:haystack =原创 2021-07-02 08:59:54 · 111 阅读 · 0 评论 -
LeetCode 21.合并两个有序链表
一、题目详情将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]二、思路简单题,既然两个链表都已经排好序了,那么只需要依次比较就可以了,直到其中一个链表为空。三、代码/** * Definition for singly-linked list. * public class ListNode { * int val; *原创 2021-07-01 09:42:39 · 88 阅读 · 0 评论 -
LeetCode 20.有效的括号
一、题目详情给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例:输入:s = “([)]”输出:false二、思路记得上数据结构课的时候,老师还讲过这个例子。很容易就能想到用栈来解决,将字符串中的字符依次入栈,每次push之前先和栈顶元素进行比较,如果相符,那就将栈顶元素pop出去。如果不相符,就将这个字符入栈。最后判断栈是否为空,就知道这个字符原创 2021-06-30 16:01:06 · 117 阅读 · 0 评论 -
LeetCode 15.三数之和
一、题目详情给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意: 答案中不可以包含重复的三元组。示例:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]二、思路首先能想到的就是嵌套三层循环,找到所有满足条件的组合,然后再进行复杂繁琐的去重操作,太过麻烦,时间复杂度O(N³)。而先进行去重操作,然后使用普通的三层循环,这样原创 2021-06-30 10:20:50 · 114 阅读 · 0 评论 -
LeetCode 8.字符串转换整数
一、题目详情请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(即原创 2021-06-30 09:53:41 · 185 阅读 · 0 评论 -
LeetCode 1. 两数之和
一、题目详情给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。二、思路首先能想到的就是,两层循环,遍历数组中的每一种组合。类似于概率论原创 2021-06-29 09:57:15 · 117 阅读 · 0 评论 -
基本数据结构之树、图
一、二叉树 以下采用链表结构来实现上图的二叉树:#include <cstdlib>#include <iostream>using namespace std;struct mNode{ int mData; struct mNode *left; struct mNode *right;};void PreOrder(mNode *node)原创 2017-06-19 09:56:51 · 1442 阅读 · 0 评论 -
基本数据结构之栈、队列、链表
一、栈栈实现的是一种后进先出(last-in,first-out,LIFO)策略,在栈中被删除的都是最近插入的元素。 栈上的insert操作被称为压入(PUSH),而无元素参数的DELETE操作被称为弹出(POP)。 我们简单地用定长的数组来实现栈:#include <cstdlib>#include <iostream>using namespace std;struct MyStack原创 2017-06-18 17:32:31 · 329 阅读 · 0 评论 -
排序之插入、归并、快速排序
一、插入排序最简单的排序方法,类似玩扑克,开始时我们的左手为空,之后我们每次从桌子上拿走一张牌并插入左手中的正确位置。 我们可以将牌分为三部分,左手中的已排序好的牌,右手中的一张牌,桌子上的一堆牌。而为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较,保证左手中的牌总是排序好的。 public void insertionSort(int a[]){ for原创 2017-05-25 12:08:55 · 425 阅读 · 0 评论