最长和谐子串
作者:互联网
题目:
和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。
现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。
数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。(这句话重点理解可以删除元素,但你不能改变顺序)
第一想法,定义两个指针,写两个函数,findMax,findMin,然后hashmap好久没用,不太会用了,只是知道用滑动窗口问题很好解决,右滑,对比之前的value值,如果相差大于1,left指针向右走。(初始思路)
看了答案后发现根本不需要找最大值最小值,先把数组排个序,在进行操作,果然有hashmap,穷举我是没有想到可以按那样的思路,
看完答案后第一次写,用穷举做的,忘了排序,显然不排序肯定不对,比如1,3,2,2,5,2,3,7的例子,如果不排序的话,当left指针指向3的时候,right指针指向2,相减为负数,right指针继续后移,直到遇到5,5-3>1,然后left指针右移了,发现此时错过了答案。
加上Arrays.sort()就可以了
第二种 哈希map来求解,思路相同
在比如上面这个例子,先遍历数组,对应的num都有一个value值,然后对每一个key值判断,判断什么呢,判断这个key加1所对应的那个索引值key存不存在,存在的话这个和谐子序列的值就是key的value值和key加1的value值相加,循环做的事情就是更新res,去找那个最长的子序列
标签:子串,数组,value,和谐,key,序列,left,最长,指针 来源: https://blog.csdn.net/tyf4350158/article/details/121440079