阅读 91

剑指Offer JavaScript leetcode刷题 第5天 查找算法(中等)

查找算法(中等)

对于查找算法的,一般可以直接用暴力法,也就是一个一个进行确认进行比较,最后得出结果,如果对的话,就直接输出

比如下面这道题目的话,可以通过对首列数字进行比较,找对大致符合的那一列的,然后再对行进行遍历。

剑指 Offer 04. 二维数组中的查找

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

示例:

现有矩阵 matrix 如下:

[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ] 给定 target = 5,返回 true。

给定 target = 20,返回 false。

限制:

0 <= n <= 1000

0 <= m <= 1000

注意:本题与主站 240 题相同:leetcode-cn.com/problems/se…

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/er… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

/**
 * @param {number[][]} matrix
 * @param {number} target
 * @return {boolean}
 */
var findNumberIn2DArray = function(matrix, target) {
 // 如果使用二分法的话,可以使得算法更加地简易
    if(matrix.length == 0) return false
    var h = matrix.length // 行数
    var l = matrix[0].length //列数
    // 暂时先用直接遍历
    for(var i = 0;i < h;i++){
        // 大于第一个数的时候
        if(target >= matrix[i][0] && target <= matrix[i][l - 1]){
            //从列中进行查找
            for(var j = 0;j < l;j++){
                // 找到目标
                if(target == matrix[i][j]){
                    return true
                }
            }
        }
    }
    return false
};复制代码

剑指 Offer 11. 旋转数组的最小数字

这道题的话,就像是爬楼梯,爬到最高的地方会掉下来,掉下来的地方就是最低点!

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。

示例 1:

输入:[3,4,5,1,2] 输出:1 示例 2:

输入:[2,2,2,0,1] 输出:0 注意:本题与主站 154 题相同:leetcode-cn.com/problems/fi…

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/xu… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

/**
 * @param {number[]} numbers
 * @return {number}
 */
var minArray = function(numbers) {
// 只是找出最小值吗?
//直接暴力查找
// 也可以用二分查找
    var min = numbers[0]
    for(var i = 0;i < numbers.length;i++){
        if(numbers[i] < min){
            return numbers[i]
        }
    }
    return numbers[0]
};复制代码

剑指 Offer 50. 第一个只出现一次的字符

这道题目的话,需要用来js的Map

var map = new Map()

查看是否存在 map.has( )

查看总共有多少个数: map.size

查看键值:map.keys()

查看数值: map.values()

得到数值:map.get()

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。

示例 1:

输入:s = "abaccdeff" 输出:'b' 示例 2:

输入:s = "" 输出:' '

限制:

0 <= s 的长度 <= 50000

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/di… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

/**
 * @param {string} s
 * @return {character}
 */
var firstUniqChar = function(s) {
    // 用字典来对计算次数 列出哈希表
    // 使用map类来进行
    var map = new Map();
    if(s.length == 0) return " "
    for(var i = 0;i < s.length;i++){
        // 如果存在的话,就让数值加一
        if(map.has(s[i])){
            var num = map.get(s[i]) + 1 //得到对应的数值,然后进行加一运算
            map.set(s[i],num)
        }else{
            map.set(s[i],1) // 进行设置
        }
    }
    for(var i = 0;i < s.length;i++){
    // 如果存在的话,就让数值加一
        if(map.get(s[i]) == 1){
            return s[i]
        }
    }
    return " "
};复制代码

\


作者:Jack_Li
链接:https://juejin.cn/post/7024851745008254989

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐