
数据结构与算法
小埋全能
这个作者很懒,什么都没留下…
展开
-
字符串中的第一个唯一字符 && 有效的字母异位词
上周没刷,这周刷两道,记录一下。字符串中的第一个唯一字符问题描述给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。思路思路1:二重循环遍历,每遍历一位,往后面查找,有重复的就continue,没重复的返回结果。时间复杂度O(n2)思路2:定义一个类(字符,索引,出现次数),遍历字符串,统计信息存到Map里面,然后放到优先队列中,然后一个个拿出来,返回第一个出现次数为1的字符索引。O(nlogn)。(代码实现)思路3:两次遍历。一次遍历存储每个字符出现次数,第原创 2021-10-24 22:20:11 · 132 阅读 · 0 评论 -
反转字符串 && 整数反转
国庆节最后一天,还是得还欠下的债。数组刷完啦,开始刷字符串,刚开始比较简单,就刷两道吧,也就花了1,2个小时。反转字符串题目描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnhbqj/思路思路:前后一直换代码实现p原创 2021-10-07 12:06:59 · 190 阅读 · 0 评论 -
旋转图像
题目给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnhhkv/思路思路1:使用一个临时数组,复制原二维数组。然后遍历临时数组,matrix[column][length - row - 1]=temp[row][c原创 2021-09-26 00:07:12 · 129 阅读 · 0 评论 -
有效的数独
题目请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 ‘.’ 表示。注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。思路1. 用三个Map<Integer,<Set<Integer&g原创 2021-09-13 00:00:24 · 117 阅读 · 0 评论 -
两数之和
今天要追剧,还有视频要看,虽然这道之前做过,有思路,比较快,也就做一道吧。### 题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。### 思路:```思路1:两次遍历,时间复杂度O(n2),空间复杂度O(1)思路2:用map数组,存和为target的另一个值和对应的数.原创 2021-08-29 21:29:40 · 114 阅读 · 0 评论 -
加一 && 移动零
题目描述:给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。思路:1. 换个思路,和题目引导的不一样。把所有0移到数组末尾 = 将所有非0元素移到最前面。时间复杂度O(n)代码:public int[] plusOne(int[] digits) { int carry = 0; int tempSum = digits[digi...原创 2021-08-22 22:41:07 · 140 阅读 · 0 评论 -
两个数组的交集 II
问题描述给定两个数组,编写一个函数来计算它们的交集。思路1. 遍历一个数组,用HashSet存储,遍历另一个数组,然后判断前一个有没有。时间复杂度O(2n),空间复杂度O(n)。不行,反例[1,2][2,2],遍历顺序不对的话,会有问题。2. 遍历一个数组,用map存储数字和出现次数,然后遍历另一个数组,有相同数字的减1直到0,将相同数字放到list中,最后将list转为数组。2. 暴力法:遍历一个数组,遍历另一个数组看有没有,O(n2)。空间复杂度O(n)。应该有问题,数量可能不对。3原创 2021-08-15 23:10:43 · 143 阅读 · 0 评论 -
存在重复元素 只出现一次的数字
这两道都比较简单,就一起写了吧。存在重复元素题目描述:给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。思路:思路1:遍历,用map存,后面不断从map中找。时间复杂度O(n),空间复杂度O(n)思路2:排序然后扫描。时间复杂度O(nlogn),空间复杂度O(1)代码:// 思路1public boolean containsDuplicate(int[] nums) {.原创 2021-08-09 00:11:45 · 248 阅读 · 0 评论 -
买卖股票的最佳时机 II 旋转数组
这两道都比较简单,就一起写了吧。题目描述:给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。思路:刚看到以为挺难的题,要用动态规划什么的,不过后面想了一下,遍历然后将升序的部分加起来就好了,算是贪心算法吧。代码:public int maxProfit(int[] prices)原创 2021-08-03 00:17:58 · 117 阅读 · 0 评论 -
删除排序数组中的重复项
开个坑,准备跟着LeetCode的初级算法课程,一周一道题吧,这种事最难坚持了,每周发个博客,有仪式感一点。首先是题目描述:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。相关标签:数组 双指针思路:刚看到时,首先想到的是,遍历一遍,然后用新数组存,不过题目要求O(1)空间,得换一个思路。然后想到的是,遍历一遍,然后一直把之后原创 2021-07-25 19:56:50 · 103 阅读 · 0 评论 -
通过后缀表达式进行算数表达式求值(栈的应用)
这是一道面试时遇到的题目,那时没答出来,之后查了相关资料。在这里将自己对于这个问题的理解做下记录,之后便于查阅。题目:给定一个算数表达式,用程序进行算数表达式求值。比如求解1×2+6×(3-4÷5)。思路:先用运算符栈将常见的中缀表达式转化为后缀表达式(逆波兰表达式)。再通过操作数栈进行后缀表达式的求值。后缀表达式:操作数在前,运算符在后,且运算符按优先级从高到低排序。运算符有+,-,×,...原创 2019-04-30 11:19:54 · 1553 阅读 · 0 评论