leetCode 编号274和392

26 阅读2分钟

274. H 指数:给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 **h 指数

根据维基百科上 h 指数的定义h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 h 篇论文,并且 至少 有 h 篇论文被引用次数大于等于 h 。如果 h 有多种可能的值,h 指数** 是其中最大的那个。

思路:
  1. 先将数组升序排序
  2. 当数组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
  • 两个字符串都只由小写字符组成。
思路:
  1. 双指针,指向s指针的值,如果在t中存在,s的指针向后移动1位,t遍历结束后,指针移动到s之后,则st的子序列,遍历中途也可添加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
};