数据结构
Ming明之中
这个作者很懒,什么都没留下…
展开
-
寻找快乐数
链接地址:快乐数解题思路即要点:为什么会想到使用Set集合?有题目可知,若出现循环则不是快乐数,那么当我们使用一个集合去存储他的时候里面的元素不重复则说明是快乐数,不重复是Set集合的一个重要的特点。因此想到使用Set集合。题目的关键是要分析要有几趟循环以及每一趟循环需要如何处理,几趟循环是由容器中出现重复元素则终止,否则一直循环,每一趟循环则是(n>0)对n不断取10的取余操作,将其每位数的平方累加。分析完完毕后,将两循环嵌套号即可以得到如下代码。class Solution { p原创 2022-03-29 14:04:52 · 129 阅读 · 0 评论 -
两个数组的交集
两个数组的交集解题思路:没有个数限制,不重复,可以无序----->Set集合Set集合常用的实现方法为HashSet。将第一个数组的元素存储到ASet集合中,此时Set集合只有第一个数组中所有不重复的元素,再将第二个数组中,且在Aset集合中的(使用contains()方法)存储到第二个集合Bset中,增强for循环将Bset放到数组中,返回数组即可。class Solution { public int[] intersection(int[] nums1, int[] nums2)原创 2022-03-28 11:56:50 · 337 阅读 · 0 评论 -
【数据结构】判别字符串中每个字符出现的次数是否相同
力扣连接:有效的字母异位词解题思路:设置一个数组,数组大小为26(因为字母表中的字母数为26,因此只需26个位置就能记录所有字母出现的次数),遍历第一个字符串时,当出现了对应的字母,就在数组的value值+‘1’,直到遍历完第一个字符串,遍历第二个字符串,当出现了对应的字母,就在数组的value值-‘1’。最后遍历一下当前数组,若有不为0的数组,说明两字符串中每个字符出现的次数不相同,否则则相同。代码如下class Solution { public boolean isAnagram(St原创 2022-03-27 10:50:43 · 305 阅读 · 0 评论 -
【数据结构】环形链表求入口节点的方法你造吗?
链接:环形链表解决环形链表有两个关键的问题点:(1)怎么确定为环?(2)怎么确定如环节点?(1)确定存在环结构的方法:1.快慢指针法 2. HashSet法思路一:Fast指针走一次走两步,slow指针一次走一步,Fast的相对于slow指针的速度为1,因此若存在环结构,则两指针一定会相遇。思路二:HashSet法,遍历链表,将元素存入set集合中,当出现第一个重复元素,则为入口节点。(2)确定环的入口节点:fast指针指回头结点,slow指针指向相遇节点,每次移动一步,当fast=slow时即为原创 2022-03-26 14:35:38 · 756 阅读 · 0 评论 -
【数据结构】链表相点问题
力扣链接:链表相交要点:对于不同长度的链表,核心问题就是找到交点,交点如何寻找是本题的重中之重。仔细分析可知,两链表若有交点,也其交点一定是在短的链表的第一个节点到最后一个节点之间,公共节点一定是即在A链表中又在B链表中的,因此我们需要将长节点的遍历指针移动到和B链表末尾对其的位置,逐个去寻找才能找到交点。代码如下:/** * Definition for singly-linked list. * public class ListNode { * int val; * L原创 2022-03-26 12:35:44 · 1043 阅读 · 0 评论 -
【双指针的运用】删除链表的倒数第 N 个结点
力扣连接:删除链表的倒数第 N 个结点思路:解决链表中倒数第几个节点常用的方法为,双指针法,设置一个low和hight指针,要想删除倒数第几个节点,只需high指针想前先走几步,之后,low和high指针同时移动,直到high==null时,此时low所指的地方,即为要删除的节点。而删除节点,为了使得头结点的删除逻辑与其他节点的逻辑相同,通常会设置一个虚拟头结点来统一操作。且为了能够删除节点,low指针的指向最好为要删除节点的上一个节点,这样能够方便删除。不使用头节点的代码如下:/** * Defi原创 2022-03-23 11:23:08 · 648 阅读 · 0 评论 -
链表的逆序解法:巧用【三指针】解决
题目:力扣链接思路:本题思路较为简单,想要逆序数组,且为前驱,若仅有一个指针进行单链表的遍历,则遍历到某一节点时,想要指向其前驱,但由于是单链表,没有前驱指针,因此寻找不到节点,因此想要设置一个变量去存储其前驱节点,而在改变节点的next域指向其前驱时,则会丢掉其后继,为了解决这一问题,又需要设置一个节点存储遍历节点的后继。代码实现如下:/** * Definition for singly-linked list. * public class ListNode { * int val原创 2022-03-21 11:37:02 · 327 阅读 · 0 评论 -
数据结构:滑动窗口还能这样玩(解决子数组问题)
滑动窗口:解决的问题:连续的子序列问题,考虑使用滑动窗口解决。滑动窗口的要点:双指针,i,j;临时窗口长度变量;已知最短的窗口长度变量移动的关键:i指针不断向后移动,遍历数组;j指针当发生sum>=temp时,发生移动,寻找下一个满足条件的窗口;满足条件的窗口判断是否比之前所存储的窗口小...原创 2022-03-16 11:25:30 · 360 阅读 · 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]对于平方项需要考虑负数的存在!双指针的终止条件为l原创 2022-03-14 12:45:54 · 54 阅读 · 0 评论 -
数组的二分查找
二分查找解决什么问题?寻找数组中某一个元素使用二分查找的前提条件是什么?数组的有序,且元素不重复解决问题的思路是什么?(1)设置两指针,low和high,分别指向数组的首部和尾部(2)不断的将问题的规模缩小,直至low>high,循环结束(while)循环(3)mid指针应该设为mid=low+(high-low)/2,其值实际上等于mid = low+high/2,,但low+high/2容易导致溢出(4)问题的关键点:low、high指针的移动方法,当原创 2022-03-12 12:08:27 · 1651 阅读 · 0 评论