![](https://img-blog.csdnimg.cn/c5a0ebf7e6c043009f6b63a575bea4ad.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法Algorithm
文章平均质量分 59
本专栏记录了本人在学习过程中的一些算法思路总结,除此以外也有一些题目的记录,大家一起学习
PinkGranite
早上好 中午好 晚上好
展开
-
链表问题解题思路总结——看这一篇就够啦~(例题+分析+代码示例)
目录1. 结题思路总结2. 回文串判断2.1 思路一:基于栈数据结构2.2 思路二:栈优化(快慢指针思想)2.3 思路三:快慢指针 + 链表结构调整3. 荷兰国旗问题(单链表版本)3.1 思路一:基础Partition3.2 思路二:优化Partition(基于链表本身的特性)4. 特殊链表复制问题3.2 思路一:借助其他数据结构3.3 思路二:链表的结构调整与恢复参考:左神算法课(大力推荐,感兴趣的同学都可以自己去一探究竟!!)1. 结题思路总结高屋建瓴,面对链表问题我们可以尝试从下面这些角度去考原创 2021-11-12 11:55:53 · 886 阅读 · 0 评论 -
LeeCode——#50.Pow(x, n)
题目描述:实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例:输入: 2.00000, 10输出: 1024.00000我的答案:思路:在一系列尝试之后可以发现,使用直接遍历的方式进行幂的计算,对于一些特殊的算例表现无力(时间过长)。本答案思路特征为“两两相乘”。需要特殊考虑的是数字边界(int数据范围)等等。class Solution { public static double myPow(double x, int n) { double resul原创 2021-01-16 22:24:11 · 79 阅读 · 2 评论 -
LeeCode——#649.分割数组为连续子数列
题目描述:给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 。如果可以完成上述分割,则返回 true ;否则,返回 false 。示例1输入: [1,2,3,3,4,5]输出: True解释:你可以分割出这样两个连续子序列 :1, 2, 33, 4, 5示例2输入: [1,2,3,3,4,4,5,5]输出: True解释:你可以分割出这样两个连续子序列 :1, 2, 3, 4, 53, 4原创 2020-12-04 22:55:28 · 230 阅读 · 0 评论 -
LeeCode——#321.拼接最大数
题目描述:给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字。现在从这两个数组中选出 k (k <= m + n) 个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。求满足该条件的最大数。结果返回一个表示该最大数的长度为 k 的数组。示例1:输入:nums1 = [3, 4, 6, 5]nums2 = [9, 1, 2, 5, 8, 3]k = 5输出:[9, 8, 6, 5, 3]示例2输入:nums1 =原创 2020-12-02 09:43:53 · 110 阅读 · 0 评论 -
LeeCode——#34.在排序数组中查找一个数的第一个以及最后一个位置
题目描述:示例1:实例2:我的答案1:这个答案直接顺序查找,时间复杂度O(n)class Solution { public int[] searchRange(int[] nums, int target) { int[] result = {-1, -1}; if(nums.length==0) return result; int i = 0; while(i<nums.length && nums[原创 2020-12-01 10:42:08 · 111 阅读 · 0 评论 -
LeeCode——#767.重构字符串
题目描述:给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。示例1:输入: S = “aab”输出: “aba”示例2:输入: S = “aaab”输出: “”大神答案1:/** * 写一个NewChar类,里面包含字母的出现频数,和字母本身。用优先队列PriorityQueue来存储一个一个的NewChar, * 并自己写一个比较器,通过字母的频数降序排列,即构建一个大顶堆。之后两两输出,输出前两原创 2020-11-30 11:08:29 · 91 阅读 · 0 评论 -
LeeCode——#976.三角形的最大周长
题目描述:给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回 0。示例:输入:[2,1,2]输出:5我的答案:class Solution { public int largestPerimeter(int[] A) { Arrays.sort(A); int result = 0; for (int i = A.length - 1; i >=原创 2020-11-29 09:56:52 · 255 阅读 · 0 评论 -
LeeCode——#454.四数相加
题目描述:给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。示例1:输入:A = [ 1, 2]B = [-2,-1]C = [-1, 2]D = [ 0, 2]输出:2解释:两个原创 2020-11-27 09:45:28 · 220 阅读 · 0 评论 -
LeeCode——#164.最大间距
题目描述:给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。如果数组元素个数小于 2,则返回 0。示例1:输入: [3,6,9,1]输出: 3解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。示例2:输入: [10]输出: 0解释: 数组元素个数小于 2,因此返回 0。我的答案:class Solution { public int maximumGap(int[] nums) { if原创 2020-11-26 21:22:47 · 113 阅读 · 0 评论 -
LeeCode——#222.完全二叉树的结点数目
来自:LeeCode题目描述:给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例:本人答案:这份答案没有用到完全二叉树的性质,仅仅是基于树的易递归性来实现的。可能一部分人会认为这样不好,但我个人觉得既然有这个优势那么充分利用就可以了。/** * Definition for a binary t原创 2020-11-24 08:57:59 · 168 阅读 · 0 评论 -
LeeCode——#452.用最少数量的箭引爆气球
来自:来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimum-number-of-arrows-to-burst-balloons问题描述:在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束原创 2020-11-23 10:01:01 · 235 阅读 · 1 评论 -
LeeCode——#242.有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例1:输入: s = “anagram”, t = “nagaram”输出: true示例2:输入: s = “rat”, t = “car”输出: false我的答案:class Solution { public boolean isAnagram(String s, String t) { int value = 0; Map<Character, Integ原创 2020-11-22 17:53:43 · 65 阅读 · 0 评论 -
LeeCode——#973最接近源点的K个点
题目描述:我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。(这里,平面上两点之间的距离是欧几里德距离。)你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。示例:输入:points = [[1,3],[-2,2]], K = 1输出:[[-2,2]]解释:(1, 3) 和原点之间的距离为 sqrt(10),(-2, 2) 和原点之间的距离为 sqrt(8),由于 sqrt(8) < sqrt(10),(-2, 2) 离原创 2020-11-09 16:45:47 · 135 阅读 · 0 评论 -
LeeCode——#122.买卖股票的最佳时机Ⅱ
题目描述:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 =原创 2020-11-08 16:39:46 · 120 阅读 · 0 评论 -
LeeCode—— #1356根据数字二进制下1的数目进行排序
题目描述:给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组。示例:输入:arr = [0,1,2,3,4,5,6,7,8]输出:[0,1,2,4,8,3,5,6,7]解释:[0] 是唯一一个有 0 个 1 的数。[1,2,4,8] 都有 1 个 1 。[3,5,6] 有 2 个 1 。[7] 有 3 个 1 。按照 1 的个数排序得到的结果数组为 [0,原创 2020-11-06 21:22:48 · 168 阅读 · 1 评论 -
LeeCode——#1024 视频拼接
自己琢磨了很久做出来的笨方法,和一些大佬的代码比不了,但自己觉得一些标志的设置还是有一定的参考价值,后面还会贴出一位大佬的作品供观摩。题目描述:你将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事。这些片段可能有所重叠,也可能长度不一。视频片段 clips[i] 都用区间进行表示:开始于 clips[i][0] 并于 clips[i][1] 结束。我们甚至可以对这些片段自由地再剪辑,例如片段 [0, 7] 可以剪切成 [0, 1] + [1, 3] + [3, 7] 三部分。我们原创 2020-10-25 00:24:27 · 1586 阅读 · 2 评论 -
Java递归实现逆置操作
private ListNode reverse(ListNode head){//输入需要逆置结点的头结点,返回逆置后链表的头结点 if (head.next == null) { return head; } //递归到之后找到尾结点作为newHead ListNode newHead = reverse(head.next); //进行相邻节点的逆置操作,注意-->head.next.next==null head.next.ne原创 2020-10-23 23:32:18 · 255 阅读 · 0 评论