算法
算法
undertale flower
这个作者很懒,什么都没留下…
展开
-
每日一题(2022-07-02)——最低加油次数
每日一题:871. 最低加油次数原创 2022-07-02 14:39:19 · 454 阅读 · 0 评论 -
每日一题(2022-05-19)——最少移动次数使数组元素相等 II
462. 最少移动次数使数组元素相等 II题目描述:给你一个长度为 n 的整数数组 nums ,返回使所有数组元素相等需要的最少移动数。在一步操作中,你可以使数组中的一个元素加1或者减1。示例1:输入:nums = [1,2,3]输出:2解释:只需要两步操作(每步操作指南使一个元素加 1 或减 1):[1,2,3] => [2,2,3] => [2,2,2]示例2:输入:nums = [1,10,2,9]输出:16思路:使用中位数即最优策略:为了方原创 2022-05-19 08:44:50 · 267 阅读 · 0 评论 -
每日一题(2022-05-17)——验证外星语词典
目录953. 验证外星语词典题目描述:题解:提交结果:953. 验证外星语词典题目描述:题解:func isAlienSorted(words []string, order string) bool { // 初始化一个map,代表在新字典序对应的权重 alphabetMap := make(map[byte]int) for i, i2 := range order { alphabetMap[byte(i2)] = i } ans := true for i := 0原创 2022-05-17 18:38:56 · 123 阅读 · 0 评论 -
每日一题(2022-05-16)——后继者
目录面试题 04.06. 后继者题目描述:题解:提交结果:面试题 04.06. 后继者题目描述:题解:直接进行中序遍历(左,根,右),按照中序遍历的顺序,依次加入到切片中,然后遍历这个切片去对比p即可:func inorderSuccessor(root *TreeNode, p *TreeNode) *TreeNode { ans:=make([]TreeNode,0) ans = ldr(root,&ans) for i := 0; i < len(ans)-1;原创 2022-05-16 17:40:58 · 132 阅读 · 0 评论 -
每日一题(2022-05-13)——一次编辑(双百通过)
面试题 01.05. 一次编辑题目描述:思路: firstLen := len(first) // 第一个字符串的长度 secondLen := len(second) // 第二个字符串的长度 differVal := math.Abs(float64(firstLen - secondLen)) // 二者长度的差值 longStr := "" // 用于存放长的那个字符串 shortStr := "" // 用于存放短的那个字符串整体可以考虑三种情况:differVal &g原创 2022-05-13 19:26:26 · 102 阅读 · 0 评论 -
每日一题(2022-05-08)——数组中重复的数据
目录442. 数组中重复的数据题目描述:题解:提交结果:442. 数组中重复的数据题目描述:给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。题解:func findDuplicates(nums []int) []int { // 先排序,时间复杂度为O(n) sort.I原创 2022-05-08 10:46:50 · 476 阅读 · 0 评论 -
每日一题(2022-05-06)——最近的请求次数
目录933. 最近的请求次数題目描述:题意解释:题解:提交结果:933. 最近的请求次数題目描述:题意解释:就是返回时间在[t-3000, t]的请求数:借助例子来理解:["RecentCounter", "ping", "ping", "ping", "ping"][[],[642],[1849],[4921],[5936]]在代码中就是:func main() { rc := Constructor() // 初始化一个空切片 fmt.Println(rc.Ping(642)原创 2022-05-06 21:12:39 · 343 阅读 · 0 评论 -
每日一题(2022-05-05)——乘积小于 K 的子数组
目录713. 乘积小于 K 的子数组题目描述:题解:方式1(好理解,但是时间复杂度高):提交结果:方式2(滑动窗口):思路:提交结果:713. 乘积小于 K 的子数组题目描述:给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。题解:方式1(好理解,但是时间复杂度高):func numSubarrayProductLessThanK(nums []int, k int) int { count := 0 for i := 0;原创 2022-05-05 10:20:09 · 341 阅读 · 0 评论 -
每日一题(2022-05-04)——找出游戏的获胜者
1823. 找出游戏的获胜者题目描述:题解:func findTheWinner(n int, k int) int { // eg:n=5 friends = [1,2,3,4,5] 里面的值就是第几个小朋友 friends := make([]int, n) for i := 0; i < len(friends); i++ { friends[i] = i + 1 } // 指针 p := 0 for { // 如果只剩1人,就是赢家 if len(fr原创 2022-05-04 21:32:55 · 707 阅读 · 0 评论 -
每日一题(2022-05-01)——两棵二叉搜索树中的所有元素
目录1305. 两棵二叉搜索树中的所有元素题目描述:思路:题解:提交结果:1305. 两棵二叉搜索树中的所有元素题目描述:给你root1和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。.思路:对俩树进行中序遍历,遍历后得到的是俩有序的数组,再对这俩数组根据大小,合并到一个新的数组,即可。题解:func getAllElements(root1 *TreeNode, root2 *TreeNode) []int { ans := ma原创 2022-05-01 10:34:13 · 97 阅读 · 0 评论 -
每日一题(2022-04-30)—— 最小差值 I
目录908. 最小差值 I题目描述:思路:题解:提交结果:908. 最小差值 I题目描述:给你一个整数数组 nums,和一个整数 k 。在一个操作中,您可以选择 0 <= i < nums.length 的任何索引 i 。将 nums[i] 改为 nums[i] + x ,其中 x 是一个范围为 [-k, k] 的整数。对于每个索引 i ,最多 只能 应用 一次 此操作。nums 的 分数 是 nums 中最大和最小元素的差值。在对 nums 中的每个索引最多应用一次上述操作后,原创 2022-04-30 21:32:58 · 246 阅读 · 0 评论 -
每日一题(2022-04-28)—— 按奇偶排序数组
905. 按奇偶排序数组题目描述:给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。返回满足此条件的 任一数组 作为答案。题解:func sortArrayByParity(nums []int) []int { i := 0 // 遍历nums 遇到奇数 塞到后面,并删除当前位置 // 这里遍历的是nums 里面nums的修改不会影响这里的遍历 for _, v := range nums { if v%2 != 0 { num原创 2022-04-28 08:42:41 · 620 阅读 · 0 评论 -
每日一题(2022-04-27)—— 太平洋大西洋水流问题
文章目录417. 太平洋大西洋水流问题问题描述题解提交结果417. 太平洋大西洋水流问题问题描述有一个 m × n 的矩形岛屿,与 太平洋 和 大西洋 相邻。“太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights , heights[r][c] 表示坐标 (r, c) 上单元格 高于海平面的高度 。岛上雨水较多,如果相邻单元格的高度 小于或等于 当前单元格的高度,雨水可以直原创 2022-04-27 22:02:43 · 523 阅读 · 0 评论 -
每日一题(2022-04-26)—— 三维形体投影面积
883. 三维形体投影面积题目描述在 n x n 的网格 grid 中,我们放置了一些与 x,y,z 三轴对齐的 1 x 1 x 1 立方体。每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。现在,我们查看这些立方体在 xy 、yz 和 zx 平面上的投影。投影 就像影子,将 三维 形体映射到一个 二维 平面上。从顶部、前面和侧面看立方体时,我们会看到“影子”。返回 所有三个投影的总面积 。思路正视图:每一行最大值之和;侧视图:每一列最大值之和;原创 2022-04-26 20:08:12 · 439 阅读 · 0 评论 -
每日一题(2022-04-25)——随机数索引
目录398. 随机数索引题目描述:题解:提交结果:398. 随机数索引题目描述:给你一个可能含有 重复元素 的整数数组 nums ,请你随机输出给定的目标数字 target 的索引。你可以假设给定的数字一定存在于数组中。(target 是 nums 中的一个整数)实现 Solution 类:Solution(int[] nums) 用数组 nums 初始化对象。int pick(int target) 从 nums 中选出一个满足 nums[i] == target 的随机索引 i 。如果原创 2022-04-25 17:42:08 · 238 阅读 · 0 评论 -
每日一题(2022-04-24)——二进制间距
868. 二进制间距题目描述:给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。如,“1001” 中的两个 1 的距离为 3 。示例1:输入:n = 22输出:2解释:22 的二进制是 “10110” 。在 22 的二进制表示中,有三个 1,组成两对相邻的 1 。第一对相邻原创 2022-04-24 08:38:42 · 210 阅读 · 0 评论 -
每日一题(2022-04-22)——旋转函数
目录396. 旋转函数题目描述:超时解:思路:正解:思路:提交结果:396. 旋转函数题目描述:给定一个长度为 n 的整数数组 nums 。假设 arrk 是数组 nums 顺时针旋转 k 个位置后的数组,我们定义 nums 的 旋转函数 F 为:F(k) = 0 * arrk[0] + 1 * arrk[1] + … + (n - 1) * arrk[n - 1]返回 F(0), F(1), …, F(n-1)中的最大值 。生成的测试用例让答案符合 32 位 整数。示例 1:原创 2022-04-22 22:38:03 · 342 阅读 · 0 评论 -
每日一题(2022-04-21)——山羊拉丁文
目录824. 山羊拉丁文题目描述:题解:提交结果:![在这里插入图片描述](https://img-blog.csdnimg.cn/f1f8f397b3834ab5962d0672d4f75a58.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55So6ISR6KKL6KOF5rC0,size_20,color_FFFFFF,t_70,g_se,x_16)824. 山羊拉丁文题目描述:给你一个原创 2022-04-21 19:49:59 · 459 阅读 · 0 评论 -
每日一题(2022-04-20)——文件的最长绝对路径
目录388. 文件的最长绝对路径题目描述:思路:正解:提交结果:388. 文件的最长绝对路径题目描述:假设有一个同时存储文件和目录的文件系统。下图展示了文件系统的一个示例:这里将 dir 作为根目录中的唯一目录。dir 包含两个子目录 subdir1 和 subdir2 。subdir1 包含文件 file1.ext 和子目录 subsubdir1;subdir2 包含子目录 subsubdir2,该子目录下包含文件 file2.ext 。在文本格式中,如下所示(⟶表示制表符):dir原创 2022-04-20 22:24:35 · 173 阅读 · 0 评论 -
每日一题(2022-04-19)——字符的最短距离
目录821. 字符的最短距离题目描述:思路:题解:提交结果:821. 字符的最短距离题目描述:给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符。返回一个整数数组 answer ,其中 answer.length == s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。两个下标 i 和 j 之间的 距离 为 abs(i - j) ,其中 abs 是绝对值函数。示例1:输入:s = “loveleetcode”, c =原创 2022-04-19 20:04:31 · 271 阅读 · 0 评论 -
每日一题(2022-04-18)——字典序排数
目录386. 字典序排数题目描述:思路:题解:提交结果:386. 字典序排数题目描述:给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。示例1:输入:n = 13输出:[1,10,11,12,13,2,3,4,5,6,7,8,9]示例2:输入:n = 20输出:[1,10,11,12,13,14,15,16,17,18,19,2,20,3,4,5,6,7,8,9]思路:解释:以例二来看:可原创 2022-04-18 22:17:21 · 466 阅读 · 0 评论 -
每日一题(2022-04-15)——迷你语法分析器
目录385. 迷你语法分析器题目描述:题解:385. 迷你语法分析器题目描述:给定一个字符串 s 表示一个整数嵌套列表,实现一个解析它的语法分析器并返回解析的结果 NestedInteger 。列表中的每个元素只可能是整数或整数嵌套列表。解释:后台实现了一个NestedInteger结构体,每一个NestedInteger实例有两种情况,数字和序列。每一个序列可以包含序列和数字,而数字就是数字,不能包含序列。默认是序列,如果要设置为数字通过setInteger函数实现。比如[1, [原创 2022-04-17 21:12:17 · 213 阅读 · 0 评论 -
每日一题(2022-04-17)——最常见的单词
819. 最常见的单词题目描述:给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。题目保证至少有一个词不在禁用列表中,而且答案唯一。 禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。[示例]:输入: paragraph = “Bob hit a ball, the hit BALL flew far after it was hit.” banned = [“hit”]输出原创 2022-04-17 10:47:37 · 87 阅读 · 0 评论 -
每日一题(2022-04-16)——最大回文数乘积
目录479. 最大回文数乘积题目描述:题解:超时:正解:479. 最大回文数乘积题目描述:给定一个整数 n,返回 可表示为 两个n位整数 乘积 的 最大回文整数 。因为答案可能非常大,所以返回它对 1337 取余 。例子1:输入:n = 2输出:987解释:99 x 91 = 9009, 9009 % 1337 = 987例子2:输入: n = 1输出: 9题解:超时:func largestPalindrome1(n int) int { // eg: n=2 mi原创 2022-04-16 23:44:11 · 329 阅读 · 0 评论 -
每日一题(2022-04-13)——O(1) 时间插入、删除和获取随机元素
题目描述:O(1) 时间插入、删除和获取随机元素:实现 RandomizedSet 类:RandomizedSet() 初始化 RandomizedSet 对象。bool insert(int val):当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false。bool remove(int val):当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false。int getRandom():随机返回现有集合中的一项(测试用例保证调原创 2022-04-14 22:12:50 · 151 阅读 · 0 评论 -
每日一题(2022-04-14)——最富有客户的资产总量
题目描述:最富有客户的资产总量:给你一个 m x n的整数网格 accounts,其中 accounts[i][j]是第 i 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。客户的资产总量就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量最大的客户。示例 1:输入:accounts = [[1,2,3],[3,2,1]]输出:6解释:第 1 位客户的资产总量 = 1 + 2 + 3 = 6第 2 位客户的资产总量 = 3原创 2022-04-14 20:15:30 · 471 阅读 · 0 评论 -
算法学习(一)——插入排序
目录插入排序一步一步思考,拆分,由浅入深:代码:大O分析:改良版:验证算法——对数器插入排序一步一步思考,拆分,由浅入深:先找出最小值,小循环没啥大问题再进入下一步,再去思考边界问题。int minPos = 0;// 一步一步思考,先获取最小值for (int i = 0; i < arr.length; i++) { minPos = arr[i] < arr[minPos] ? i : minPos;}进行大循环int[] arr = {2, 8, 4,原创 2022-03-19 20:33:41 · 477 阅读 · 0 评论 -
GO数据结构(一)——稀疏数组
目录1. 稀疏数组1.1 实际问题(棋盘)1.1.1 存盘1.1.2 续盘1. 稀疏数组稀疏数组(sparsearray)基本介绍:当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。本质上就是压缩数组。稀疏数组的处理方法: 1. 记录数组一共有几行几列,有多少个不同的值。 2. 把具有不同值的元素的行列以及值,记录在一个小规模的数组中,从而缩小程序的规模。1.1 实际问题(棋盘)如下面的二维数组,我们可以假设成是一个棋盘,1代表白子,2代表黑子,现在原创 2021-11-07 00:30:48 · 168 阅读 · 0 评论 -
算法练习题(七)——顺时针打印二维数组
/** * 第一题:顺时针打印二维数组 * 1 2 3 4 * 5 6 7 8 * 9 10 11 12 * 13 14 15 16 * * 1 2 3 4 8 12 16 ~~~ * * 第一行 1~4列,然后第4列 1~4行,然后第四行,4~1列,第一列 4~2行 * 所以打印一圈的实现可以分为4步: * 第一步从左到右打印一行,第二步从上到下打印一列,第三步从右到左打印一行,第四步从下到上打印一列 * * 第一圈左上角(0,0) 第二圈左上角原创 2021-04-02 23:57:47 · 224 阅读 · 0 评论 -
算法练习题(六)——Z字型打印矩阵
/** * Z字型打印矩阵 * 1 2 3 4 * 5 6 7 8 * 9 10 11 12 * 13 14 15 16 * * 1 2 5 9 6 3 4 7 10 13 14 11 8 12 15 16 */public class TwoArraysTest03 { public static void main(String[] args) { TwoArraysTest03 twoArraysTest03 = new TwoArraysTest原创 2021-04-03 11:32:14 · 159 阅读 · 0 评论 -
算法练习题(五)——机器人走方格
import java.util.Scanner;/** * 机器人走方格 * * 有一个X*Y的网格,-个机器人只能走格点, * 且只能向右或向下走,要从左上角走到右下角。 * 请设计-个算法,计算机器人有多少种走法。 * 给定两个正整数int x,int y,请返回机器人的走法数目。 * 保证x +y小于等于12。 * * * 先找规律: * 发现 * 当前位置的走法 是 左边一格位置的走法 + 上边一格位置的走法 * f(x,y) = f(x原创 2021-04-11 08:26:23 · 162 阅读 · 0 评论 -
算法练习题(四)——十六进制和十进制的相互转换
十进制转十六进制import java.util.Scanner;public class Main_10 { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int a=scanner.nextInt(); int i=a/16; int temp=a%16; if (temp<10){ ..原创 2021-02-28 14:13:51 · 406 阅读 · 0 评论 -
算法练习题(二)——反转链表
剑指 Offer 24. 反转链表题目描述: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点例如(见代码): 输入 [1,2,3] 输出 [3,2,1]解法:思路一:迭代 1. 迭代需要三个指针,previous(上一个),current(当前),next(下一个),分别按顺序指向三个节点 2. 三个指针的初始化:previous指向空节点,current指向头结点head,next指向current.next 因为current.next.原创 2021-05-15 21:33:07 · 144 阅读 · 1 评论 -
算法练习题(一)——字母图形
/** * A~Z 65--90 */import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); int m=scanner.nextInt(); int temp=65;原创 2021-01-23 19:55:29 · 100 阅读 · 0 评论