算法
算法
解忧杂货铺Q
但行好事,莫问前程
展开
-
算法小试:替换空格
在 Java 等语言中,字符串都被设计成「不可变」的类型,即无法直接修改字符串的某一位字符,需要新建一个字符串实现。算法流程:初始化一个 list (Python) / StringBuilder (Java) ,记为 res ;遍历列表 s 中的每个字符 c :当 c 为空格时:向 res 后添加字符串 "%20" ;当 c 不为空格时:向 res 后添加字符 c ;将列表 res 转化为字符串并返回。复杂度分析:时间复杂度 O(N)O(N) : 遍历使用 O(N)O(N) ,每轮添加原创 2022-05-13 18:35:44 · 178 阅读 · 0 评论 -
数据结构知识点
前言数据结构是为实现对计算机数据有效使用的各种数据组织形式,服务于各类计算机操作。不同的数据结构具有各自对应的适用场景,旨在降低各种算法计算的时间与空间复杂度,达到最佳的任务执行效率。如下图所示,常见的数据结构可分为「线性数据结构」与「非线性数据结构」,具体为:「数组」、「链表」、「栈」、「队列」、「树」、「图」、「散列表」、「堆」数组数组是将相同类型的元素存储于连续内存空间的数据结构,其长度不可变// 初始化一个长度为 5 的数组 arrayint[] array = new int[5];原创 2022-05-10 23:13:18 · 144 阅读 · 0 评论 -
算法小试:增减字符串匹配(贪心)
由范围 [0,n] 内所有整数组成的 n + 1 个整数的排列序列可以表示为长度为 n 的字符串 s ,其中:如果 perm[i] < perm[i + 1] ,那么 s[i] == 'I' 如果 perm[i] > perm[i + 1] ,那么 s[i] == 'D' 给定一个字符串 s ,重构排列 perm 并返回它。如果有多个有效排列perm,则返回其中 任何一个 。 示例 1:输入:s = "IDID"输出:[0,4,1,3,2]示例 2:输入:s = "I原创 2022-05-09 09:35:53 · 248 阅读 · 0 评论 -
算法小试:数组中重复的数据
给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。示例 1:输入:nums = [4,3,2,7,8,2,3,1]输出:[2,3]示例 2:输入:nums = [1,1,2]输出:[1]示例 3:输入:nums = [1]输出:[] 提示:n == num原创 2022-05-08 19:31:30 · 269 阅读 · 0 评论 -
算法小试:反转字符串中的单词 III
给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例 1:输入:s = "Let's take LeetCode contest"输出:"s'teL ekat edoCteeL tsetnoc"示例 2:输入: s = "God Ding"输出:"doG gniD"提示:1 <= s.length <= 5 * 104s 包含可打印的 ASCII 字符。s 不包含任何开头或结尾空格。s 里 至少 有一个词。s 中的所有原创 2022-05-08 08:36:24 · 346 阅读 · 0 评论 -
算法小试:两数之和 II - 输入有序数组(双指针 and 二分查找)
给你一个**下标从 1 开始的整数数组 numbers** ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。你可以假设每个输入 只对应唯一的原创 2022-05-07 11:17:06 · 198 阅读 · 0 评论 -
算法小试:移动零(双指针)
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例 1:输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]示例 2:输入: nums = [0]输出: [0]方法:双指针使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。注意到以下性质:原创 2022-05-06 17:39:18 · 105 阅读 · 0 评论 -
算法小试:求有序数组的平方(双指针)
给你一个按 `非递减顺序` 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例 1:输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]示例 2:输入:nums = [-7,-3,2,3,11]输出:[4,9,9,49,121]这里有个疑问解答一下,什么是非递减顺序“递减数列”是“i<j时,A[i]&g原创 2022-05-06 12:53:21 · 123 阅读 · 0 评论 -
【算法-简单】二分查找
二分查找:二分查找法是一种在有序数组中(升序)查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半也叫做折半查找法如下:程序实现如下public static int search(int[] nums, int target) { i.原创 2022-04-30 23:36:05 · 89 阅读 · 0 评论 -
【算法练习题】搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。示例 1:输入: nums = [1,3,5,6], target = 5输出: 2示例 2:输入: nums = [1,3,5,6], target = 2输出: 1示例 3:输入: nums = [1,3,5,6], target = 7输出: 4看起来可以用二分查找解决 // 获取插入位置 public static int searchInsert(原创 2022-04-30 22:50:50 · 302 阅读 · 0 评论 -
【算法-简单】二分查找
二分查找:二分查找法是一种在有序数组中(升序)查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半也叫做折半查找法如下:程序实现如下public static int search(int[] nums, int target) { i.原创 2022-04-30 16:20:44 · 472 阅读 · 0 评论 -
LeetCode算法: 删除排序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成重点就是不能利用新的数组空间赋值,只能利用原来的数组。我们这里做下拓展,一个是只返回数组新长度,另一个是尝试获取新数组,思路一for循环嵌套遍历,一个正向循环(从0开始),一个反向循环(从length-1开始),如果正循环的值存在,则从原数组删除获取数组import cn.hutoo原创 2021-05-07 06:40:05 · 252 阅读 · 0 评论