![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
文章平均质量分 56
生产队的驴儿
一个人必须不停地写作,才能不被茫茫人海湮灭。
展开
-
java数据结构PriorityQueue
PriorityQueue 是具有优先级别的队列,优先级队列的元素按照它们的自然顺序排序,或者由队列构造时提供的 Comparator 进行排序,这取决于使用的是哪个构造函数。原创 2023-02-23 02:32:05 · 603 阅读 · 0 评论 -
关于如何计算 递归 方法 的时间复杂度 笔记总结
第一个 T(n) = T(n /2 ) + O(1)每次 n 缩小 一半,所以 一共会执行 log2 n 次每次的时间复杂度 为 O(1)总的时间复杂度 为 log2n * O(1) = log2n所以 时间复杂度 为 O(logn)第二个每次 n 只减少 1 次,所以 一共执行 n次每次时间复杂度为 O(1)总的时间复杂度为 n * O(1) = O(n)第三个每次 2 的 n次方 个减少一半 表示为 2的n次方 ,n 是 log2 n。原创 2022-10-29 10:22:00 · 1967 阅读 · 0 评论 -
通过两个stack来实现Queue
正如标题所述,你只能使用两个栈来实现队列的一些操作。队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。pop和top方法都应该返回第一个元素的值。原创 2022-06-25 10:32:40 · 583 阅读 · 0 评论 -
leetcode 中的位运算
只有两个都为1才为1只要有一个为1就为1只有不相同 才为 1,否则 为 0。左移一位可以看做 该数 乘2了左移一位可以看做 该数 除2了但是注意 如果 该数 是正数, 左边补0如果 该数 是负数,左边补1.https://leetcode.cn/problems/add-two-integers/2235 两数求和Referencehttps://www.bilibili.com/video/BV1YT4y117AH/?spm_id_from=333.788.recommend_more原创 2022-06-11 07:15:21 · 1214 阅读 · 1 评论 -
21 +java + 链表合并
You are given the heads of two sorted linked lists list1 and list2.Merge the two lists in a one sorted list. The list should be made by splicing together the nodes of the first two lists.Return the head of the merged linked list.Example 2:Example 3:case c原创 2022-06-05 05:10:41 · 99 阅读 · 0 评论 -
19 + 链表 +删除倒数节点 +快慢指针
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]找到 List 一共有多少个 节点通过 总节点 - 倒数节点数 + 1 得到 需要删除节点的位置通过while 循环,循环到 该节点的前一个节点,直接跳过该节点,连接到下一个节点拓展知识点,在对链表 操作的时候,常用技巧:原创 2022-06-03 08:15:45 · 71 阅读 · 0 评论 -
237. 删除链表中的节点 +数据结构 + 链表
请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。题目数据保证需要删除的节点 不是末尾节点 。输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:指定链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9输入:head = [4,5,1,9], node = 1输出:[4,5,9]解释:指定链表中值为 1 的第三个节点,那么在调用了你的函原创 2022-06-01 02:37:20 · 125 阅读 · 0 评论 -
14. 最长公共前缀 +循环+ 字符串截取
题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = [“flower”,“flow”,“flight”]输出:“fl”示例 2:输入:strs = [“dog”,“racecar”,“car”]输出:“”解释:输入不存在公共前缀。思路如果字符串组就是空的,直接返回空字符串把答案设为 第一个字符串循环遍历其它字符串如果字符串 有不同的字符跳出循环,同时截断 答案字符串生产新的答案如果发现答案为0,直接跳出循原创 2022-05-30 22:07:51 · 1114 阅读 · 0 评论 -
38. 外观数列 +java +循环
题目描述给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = “1”countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:111211211111221第一项是数字 1描述前一项,这个数是 1 即 “ 一 个 1 ”,记作 “11”原创 2022-05-30 14:20:55 · 102 阅读 · 0 评论 -
1342 + 数学运算 + java
题目描述Given an integer num, return the number of steps to reduce it to zero.In one step, if the current number is even, you have to divide it by 2, otherwise, you have to subtract 1 from it.Example 1:Input: num = 14Output: 6Explanation:Step 1) 14 is e原创 2022-05-29 12:51:10 · 107 阅读 · 0 评论 -
28. 实现 strStr() +暴力循环+KMP算法 +java
题目描述实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。示例 1:输入:haystack = “原创 2022-05-29 12:19:10 · 118 阅读 · 0 评论 -
8. 字符串转换整数 (atoi) +细心+边界值 + 字符串
题目描述字符串转换整数 (atoi)请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入原创 2022-05-27 08:39:44 · 148 阅读 · 0 评论 -
35. Search Insert Position +java + binary search二分查找
题目描述Given a sorted array of distinct integers and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.You must write an algorithm with O(log n) runtime complexity.Example 1:In原创 2022-05-26 20:45:19 · 121 阅读 · 0 评论 -
125. 验证回文串 + java + 双指针
题目描述给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true解释:“amanaplanacanalpanama” 是回文串示例 2:输入: “race a car”输出: false解释:“raceacar” 不是回文串思路左右两个双指针s.charAt(left)s.charAt(right)左指针0原创 2022-05-25 07:21:56 · 160 阅读 · 0 评论 -
387. 字符串中的第一个唯一字符 +java + 字典 hashMap
题目描述给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。示例 1:输入: s = “leetcode”输出: 0示例 2:输入: s = “loveleetcode”输出: 2示例 3:输入: s = “aabb”输出: -1思路创建一个字典循环遍历数组如果 这个字符在字典里面,就把字符放进去字符已经存在 设为 当前次数 + 1字符不存在 次数设为1代码class Solution { public i原创 2022-05-21 02:16:20 · 137 阅读 · 0 评论 -
344 反转字符串 + java +双指针超简单+学 交换
题目描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例 1:输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例 2:输入:s = [“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“a”,“H”]作者:力扣 (LeetCode)链接:https://lee原创 2022-05-17 08:22:02 · 113 阅读 · 0 评论 -
leetcode 1475 + java + 双指针 简单版
题目描述给定数组价格,其中价格 [i] 是商店中第 i 件商品的价格。 商店中的商品有特别折扣,如果您购买了第 i 件商品,那么您将获得等价于价格[j] 的折扣,其中 j 是满足 j > i 且价格[j] <= 价格[ i],否则,您将不会获得任何折扣。返回一个数组,其中第 i 个元素是考虑到特别折扣后您将为商店的第 i 个商品支付的最终价格。Given the array prices where prices[i] is the price of the ith item in a s原创 2022-05-17 07:51:57 · 247 阅读 · 0 评论 -
leetcode 旋转图像 +java +几何
题目描述旋转图像给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]示例 2:输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]输出:[[1原创 2022-05-16 13:35:10 · 59 阅读 · 0 评论 -
leetcode 36 有效数独
题目描述有效的数独请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。空白格用 ‘.’ 表示。示例 1:输入:board =[[“5”,“3”,“.”,“.”,“7”,“.”,“.”,“原创 2022-05-15 02:53:12 · 166 阅读 · 0 评论 -
1leetcode + java + 两数之和
题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], targe原创 2022-05-14 15:48:39 · 66 阅读 · 0 评论 -
66. 加一 +java + 进位
题目描述给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。难点读懂题思路关键点: 末尾数字是否是9直接从后往前遍历如果是不是9,那么直接加一就返回如果是9, 需要进位,把它变成0,进入下一步循环,判断其是否是9.特殊情况,如果都是9那么需要创建一个新数组,组内元素为原先的 多一个且首个元素 为 1.代码class Solution {原创 2022-05-11 01:48:58 · 206 阅读 · 0 评论 -
361 两个数的交集 + 双指针+ 字典
题目描述给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]思路创建一个map将数组1里面的所有数都放进去key为 数组的元素v原创 2022-05-10 14:01:29 · 64 阅读 · 0 评论 -
java哈希表 + leetcode 217简单题 存在重复元素
题目描述给你一个整数数组 nums。如果任一值在数组中出现 至少两次,返回 true;如果数组中每个元素互不相同,返回 false。示份1:输入:nums[1,2,3,1]输出:true示例2:输入:nums = [1,2,3,4]南出: false示例3:输入:nums = 11,1,1,3,3,4,3,2,4,2]输出:true提示:<= nums。 length <= 103-10 <= nums [i] <= 10°解题思路循环数组nums,设置一原创 2022-05-10 09:25:19 · 161 阅读 · 0 评论 -
136 只出现一次的数字 +位运算 + java + 字典
只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4。考点位运算简单题提供过将 数组的每个元素进行异或,利用 相同元素 异或 的结果为0得到 唯一一个出现1次的数字。代码class Solution { public int singleNu原创 2022-05-10 02:41:13 · 91 阅读 · 0 评论 -
环状替换 + 189 旋转数组
额外数组题目描述给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]示例 2:输入:nums = [-1,-100,3,99], k = 2输出:[3,99,-1,-100]解释: 向右轮转 1原创 2022-05-07 02:09:05 · 565 阅读 · 1 评论 -
归并排序 + java + 数据结构 + 小和逆序对问题
归并排序整体就是一个简单递归,左边排好序、右边排好序、让其整体有序代码package test3;public class Test { public static void main(String[] args) { int[] arr= {3,2,1,5,6,2}; mergeSort(arr); for (int i: arr){ System.out.printf("%d ", i); } } public static voi原创 2022-04-23 06:41:29 · 119 阅读 · 0 评论 -
递归二分找最大值 + java
代码 public static int getMax(int[] arr) { return process(arr, 0, arr.length - 1); } // arr[L...R]范围上求最大值 public static int process(int[] arr, int L, int R) { if (L == R) { return arr[L]; } int mid = L + ((R - L) >> 1); //原创 2022-04-22 11:31:43 · 438 阅读 · 0 评论 -
随机样本产生器 + java
代码随机产生数组 public static int[] generateRandomArray(int maxSize, int maxValue) { // Math.random() --> [0,1) 所有小数,等概率返回1个 // Math.random() * N --> [0,N) 所有小数,等概率返回1个 // (int) (Math.random() * N) --> [0,N-1) 所有整数,等概率返回1个 int[] arr =原创 2022-04-22 07:31:55 · 181 阅读 · 0 评论 -
通过位运算找数组中出现的数 + java + leetcode + 面试题
数组中有 1个数出现基数次,其余数都出现偶数次,如何通过位运算快速找到这个数思路循环这个数组中每个数,让其中每个元素都异或如果元素相同,异或就为0最终留下一个数字就是 基数次出现的数代码 public static void printOddTimesNum1(int[] arr){ int eor = 0; for (int cur: arr){ eor ^= cur; } System.out.println(eor); }数组中有两个数原创 2022-04-22 04:22:34 · 769 阅读 · 0 评论 -
希尔排序 +java +数据结构
希尔排序 Shell Sort缩小增量排序。简单插入排序的改进高效版本。把记录 按 下标的增量 一个一个分组。相比于插入排序改进点间隔大的时候,移动次数少。间隔小的时候,移动距离比较短。首先给一个间隔其次缩小间隔直到间隔为1图解10个数,10/2,分为5组利用步长 8 和 3一组9 和 5 一组以此类推每组之间交换,8和3交换5和9交换1和4不发生交换7和6交换2和0交换目的:尽快让小的数,往前移动5个数,5/2分为2组3 1 5 9 75 6 8 4 2这原创 2022-04-16 01:34:03 · 234 阅读 · 0 评论 -
LeetCode 29 两数相除
链接https://leetcode-cn.com/problems/divide-two-integers/代码class Solution { public int divide(int dividend, int divisor) { // 当除数为1,直接返回被除数 if (divisor == 1) { return dividend; } // 当除数为-1且被除数为Integer.MIN_VALUE时,将会溢出,返回Integer.MAX_原创 2022-04-13 06:00:57 · 346 阅读 · 0 评论