LeetCode 12.14(剑指offer)

59 阅读1分钟

04.二维数组中的查找

//右上角作为分界点,左边是小于部分,下边是大于部分。
var findNumberIn2DArray = function(matrix, target) {
    let n = matrix.length;
    if(n===0) return false;
    let m = matrix[0].length;
    if(m===0) return false;
    let i = 0;
    let j = m-1;
    while(i<n&&j>=0){
        if(matrix[i][j]>target){
            j--;
        }
        else if(matrix[i][j]<target){
            i++;
        }
        else{
            return true;
        }
    }   
    return false;
};

11.旋转数组的最小数

//中间值和右值相等时,右指针左移一个即可,如果此时右值是最小值,也有替代了。
var minArray = function(numbers) {
    let left = 0;
    let right = numbers.length-1;
    let mid = 0;
    while(left<right){
        mid = Math.floor((left+right)/2);
        if(numbers[mid]>numbers[right]){
            left = mid+1;
            continue;
        }
        if(numbers[mid]<numbers[right]){
            right = mid;
            continue;
        }
        else right = right-1;
    }
    return numbers[left];
};

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

var firstUniqChar = function(s) {
    let map = new Map();
    for(let i of s){
        if(map.has(i)){
            map.set(i,map.get(i)+1);
        }
        else{
            map.set(i,1);
        }
    }
    for(let i of s){
        if(map.get(i)===1){
            return i;
        }
    }
    return " ";
};