剑指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