274. H 指数:给你一个整数数组 citations
,其中 citations[i]
表示研究者的第 i
篇论文被引用的次数。计算并返回该研究者的 **h
指数。
根据维基百科上 h 指数的定义:h
代表“高引用次数” ,一名科研人员的 h
指数 是指他(她)至少发表了 h
篇论文,并且 至少 有 h
篇论文被引用次数大于等于 h
。如果 h
有多种可能的值,h
指数** 是其中最大的那个。
思路:
- 先将数组升序排序
- 当数组
citations
首次 大于等于h
指数,且引用次数大于h
指数的论文数len - i
大于等于h
指数时,h
指数+1
,重新循环时,从当前项开始遍历,因为升序排序,所以当前项之前的项肯定不满足 大于等于h
指数的条件,最后返回h
指数为result-1
,是因为我们这里满足条件后会reslut++
,最后一个不满足条件的h
指数,实际是我们需要的h
指数+1
的结果,所以需要-1
/**
* @param {number[]} citations
* @return {number}
*/
var hIndex = function(citations) {
let len = citations.length
citations.sort((a, b) => a - b)
let reslut = 0
for(let i = 0; i < len; i++) {
if(citations[i] >= reslut && len - i >= reslut) {
i--
reslut++
}
}
return reslut - 1
};
392. 判断子序列:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"
是"abcde"
的一个子序列,而"aec"
不是)
提示:
0 <= s.length <= 100
0 <= t.length <= 10^4
- 两个字符串都只由小写字符组成。
思路:
- 双指针,指向
s
指针的值,如果在t
中存在,s
的指针向后移动1
位,t
遍历结束后,指针移动到s
之后,则s
是t
的子序列,遍历中途也可添加break
来终止循环
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isSubsequence = function(s, t) {
let len = t.length
let j = 0
for(let i = 0; i < len; i++) {
if(t[i] == s[j]) {
j++
// 可加可不加 我加是为了完成s数组的遍历能直接终止循环
if(j === s.length) {
break
}
}
}
return j === s.length
};