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 <= 1000 <= 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
};