
算法与数据结构
算法与数据结构
努力推石头的西西弗斯
无问西东
展开
-
JAVA Leetcode225. 用队列实现栈
225. 用队列实现栈来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/implement-stack-using-queues著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题目请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈原创 2022-01-24 17:28:26 · 348 阅读 · 0 评论 -
JAVA Leetcode232. 用栈实现队列
232. 用栈实现队列来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/implement-queue-using-stacks著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题目请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返原创 2022-01-24 16:54:48 · 247 阅读 · 0 评论 -
JAVA Leetcode155. 最小栈
155. 最小栈来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/min-stack著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:["MinStack",原创 2022-01-20 19:32:09 · 342 阅读 · 0 评论 -
JAVA Leetcode622. 设计循环队列
622. 设计循环队列来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/design-circular-queue著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题目设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不原创 2022-01-20 19:04:37 · 213 阅读 · 0 评论 -
JAVA Leetcode219. 存在重复元素 II
219. 存在重复元素 II来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/contains-duplicate-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题目给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 tr原创 2022-01-19 11:45:58 · 225 阅读 · 0 评论 -
JAVA Leetcode12. 整数转罗马数字
题目整数转罗马数字罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写原创 2022-01-19 11:09:44 · 286 阅读 · 0 评论 -
JAVA Leetcode13. 罗马数字转整数
题目罗马数字转整数罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X&n原创 2022-01-18 19:32:06 · 247 阅读 · 0 评论 -
JAVA Leetcode539. 最小时间差
题目539. 最小时间差 给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。示例 1:输入:timePoints = ["23:59","00:00"]输出:1示例 2:输入:timePoints = ["00:00","23:59","00:00"]输出:0### 题解```import java.util.Arrays;import java.util.List;public class Solution原创 2022-01-18 18:35:37 · 350 阅读 · 0 评论 -
JAVA Leetcode373. 查找和最小的K对数字
题目373. 查找和最小的K对数字给定两个以 升序排列 的整数数组 nums1 和 nums2 , 以及一个整数 k 。定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2 。请找到和最小的 k 个数对 (u1,v1), (u2,v2) … (uk,vk) 。示例 1:输入: nums1 = [1,7,11], nums2 = [2,4,6]原创 2022-01-14 16:21:07 · 309 阅读 · 0 评论 -
JAVA Leetcode747. 至少是其他数字两倍的最大数
题目747. 至少是其他数字两倍的最大数给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。 示例 1:输入:nums = [3,6,1,0]输出:1解释:6 是最大的整数,对于数组中的其他整数,6 大于数组中其他元素的两倍。6 的下标是 1 ,所以返回 1 。示例 2:输入:nums = [1,2,3,4]输出:-1解释:4 没有超原创 2022-01-13 10:53:03 · 203 阅读 · 0 评论 -
JAVA Leetcode334. 递增的三元子序列
题目递增的三元子序列给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。示例 1:输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意示例 2:输入:nums = [5,4,3,2,1]输原创 2022-01-12 13:44:29 · 490 阅读 · 0 评论 -
JAVA Leetcode2.两数相加
题目两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-two-numbers著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请原创 2022-01-12 13:05:56 · 167 阅读 · 0 评论 -
JAVA Leetcode1.两数之和
题目两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/two-sum著作权归领原创 2022-01-12 11:48:49 · 149 阅读 · 0 评论 -
JAVA Leetcode137.只出现一次的数字 II
题目只出现一次的数字 II给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/single-number-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题解class Solution { public int singleNumber(int[] nums) {原创 2022-01-10 19:03:11 · 731 阅读 · 0 评论 -
JAVA Leetcode260.只出现一次的数字 III
题目只出现一次的数字 III给定一个整数数组nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/single-number-iii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题解class Solution {原创 2022-01-10 18:16:07 · 427 阅读 · 0 评论 -
JAVA Leetcode136.只出现一次的数字
题目只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/single-number著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题解class Solution { public int singleNumber(原创 2022-01-10 18:03:39 · 218 阅读 · 0 评论 -
牛客网NC105 二分查找-II
描述请实现有重复数字的升序数组的二分查找给定一个 元素有序的(升序)长度为n的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1数据范围:0 ≤ len(nums) ≤ 10000 , 数组中任意值满足 |val| ≤ 10000进阶:时间复杂度 O(logn) ,空间复杂度 O(1)示例示例1输入:[1,2,4,4,5],4返回值:2说明:从左到右,查找到第1个为4的,下标为2,返回2原创 2022-01-07 19:29:54 · 194 阅读 · 0 评论 -
牛客网NC160 二分查找-I
描述请实现无重复数字的升序数组的二分查找给定一个 元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1数据范围:0 ≤ len(nums) ≤ 10000 , 数组中任意值满足 |val| ≤ 10000进阶:时间复杂度 O(logn) ,空间复杂度 O(1)示例1输入:[-1,0,3,4,6,10,13,14],13 返回值:6 说明:13 出现在nums原创 2022-01-07 19:17:40 · 394 阅读 · 0 评论 -
排序算法03.选择排序
性质名称值时间复杂度O(N^2)是否稳定不稳定流程第一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。代码public static void selectionSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int i =原创 2022-01-07 18:23:31 · 144 阅读 · 0 评论 -
排序算法02.插入排序
性质性质名字性质时间复杂度O(N^2)是否稳定稳定流程插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序。代码public static void insertionSort(int[] arr) { if (arr == null || arr.leng原创 2022-01-07 18:22:30 · 557 阅读 · 0 评论 -
排序算法01.冒泡排序
性质性质名字性质时间复杂度O(N^2)是否稳定稳定流程比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。代码public static void bubbleSort(int[] arr) { if (arr == null || arr.原创 2022-01-07 18:21:59 · 217 阅读 · 0 评论 -
牛客网NC68 跳台阶
描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。数据范围:0 ≤ n ≤40要求:时间复杂度:O(n) ,空间复杂度: O(1)示例1输入:2返回值:2说明:青蛙要跳上两级台阶有两种跳法,分别是:先跳一级,再跳一级或者直接跳两级。因此答案为2示例2输入:7返回值:21示例3输入:0返回值:0我的代码public class Solution { publi原创 2022-01-07 18:02:10 · 381 阅读 · 0 评论 -
牛客网NC78 反转链表
题目给定一个单链表的头结点pHead,长度为n,反转该链表后,返回新链表的表头。数据范围: n\leq1000n≤1000要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。示例1输入{1,2,3}输出{3,2,1}示例2输入{}输出{}说明空链表则输出空我的代码/*public class ListNode { int va原创 2022-01-07 17:43:29 · 325 阅读 · 0 评论