
数据结构与算法
LeetCode刷题
非洲大主教
这个作者很懒,什么都没留下…
展开
-
位运算-只出现一次的数字1-Go语言
题目 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 思路: 遍历数组,对数组中的元素按位异或, 最终就能得到只出现了一次的那个数字。这里还需要新建一个result := 0作为与第一个数组元素异或的元素(因为0与任何数异或都等于数本身) 代码如下 func singleNumber(nums []int) int { result := 0 for i := range nums { result ^= nums[i原创 2022-02-24 11:03:52 · 144 阅读 · 0 评论 -
字符串-验证回文串-Go语言
题目 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明: 本题中,我们将空字符串定义为有效的回文串。 思路: 回文串同样是使用双指针的思路,只需要每个start等于end就是回文串。但是首先需要对字符串进行预处理,将非数字非字母的字节去除,然后依次遍历start++ end–就行了 代码如下: func isPalindrome(s string) bool { start := 0 end := len(s) - 1 s = strings原创 2022-02-21 16:34:26 · 872 阅读 · 0 评论 -
字符串-翻转字符串里的单词-Go语言
题目 给你一个字符串 s ,逐个翻转字符串中的所有 单词 。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的单词分隔开。 请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。 说明: 输入字符串 s 可以在前面、后面或者单词间包含多余的空格。 翻转后单词间应当仅用一个空格分隔。 翻转后的字符串中不应包含额外的空格 思路 还是使用双指针(start, end)的思想 首先去除字符串两端的空格,并使用头尾指针标记第一个字母和最后一个字母的位置,使用循环去除空格,如果当前索引的原创 2022-02-21 16:21:45 · 318 阅读 · 0 评论 -
数组-最接近的三数之和-三数之和-Go语言
题目一 最接近的三数之和 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 思路1: 最简单的就是暴力求解,直接遍历数组,三重循环,时间复杂度达到O(n) = n^3,具体代码如下(网上copy): func threeSumClosest(nums []int, target int) int { n:=len(nums) path:=math.MaxInt原创 2022-02-20 12:36:36 · 569 阅读 · 0 评论 -
栈-最小栈-Go语言
题目 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int top() 获取堆栈顶部的元素。 int getMin() 获取堆栈中的最小元素。 解法1: 使用两个栈来实现,一个存入数据dataStack,另一个来计算最小值的栈minStack,该方法可以避免再遍历一次堆栈,降低了时间复杂度原创 2022-02-19 15:27:46 · 522 阅读 · 0 评论 -
栈-比较含退格的字符-Go语言
题目:给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。 注意:如果对空文本输入退格字符,文本继续为空。 解法一 首先想到的是新建一个切片类型遍历字符串中的每个元素判断是否为退格“#”,如果不是就将当前遍历到的字符压入栈中,如果是“#”,就将切片取到切片长度-1的位置, 等同于删除“#”的前一个元素。具体实现打码如下: func backspaceCompare(s string, t string) bool { return buil原创 2022-02-19 14:51:36 · 376 阅读 · 0 评论