Golang语言[6] 递增的三元子序列/笨阶乘/矩阵查找/直方图的水量 |Go主题月(上)

简介: 给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。

递增的三元子序列



给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。


如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。


示例 1:

输入:nums = [1,2,3,4,5]

输出:true

解释:任何 i < j < k 的三元组都满足题意


示例 2:

输入:nums = [5,4,3,2,1]

输出:false

解释:不存在满足题意的三元组


示例 3:

输入:nums = [2,1,5,0,4,6]

输出:true

解释:三元组 (3, 4, 5) 满足题意,因为 nums[3] == 0 < nums[4] == 4 < nums[5] == 6


提示:

1 <= nums.length <= 105

   -231 <= nums[i] <= 231 - 1


进阶:你能实现时间复杂度为 O(n) ,空间复杂度为 O(1) 的解决方案吗?


解题思路一



1.找到最小值和次小的值,通过跟当前元素进行比较;

2.更新最小值和次小值

2.否则即满足条件


//引入math库
import (
    "math"
)
func increasingTriplet(nums []int) bool {
    //记录最小值和第二小的值
    m1, m2 := math.MaxInt32, math.MaxInt32
    for _, v := range nums {
        //找到子序列第一个元素,不断更新
        if m1 >= v {
            m1 = v
        } else if m2 >= v {
            //找到子序列第二个元素,不断更新
            m2 = v
        } else {
            //找到第三个,满足要求
            return true
        }
    }
    return false
}


Javascript



/**
 * @param {number[]} nums
 * @return {boolean}
 */
var increasingTriplet = function (nums) {
    let min = nums[0], temp = Number.MAX_VALUE
    // 最小值,中间值
    for (let i = 1; i < nums.length-1; i++) {
        //找到最小值
        min = Math.min(min, nums[i])
        //找到中间值
        if (nums[i] > min) {
            temp = nums[i]
        }
        //找到第三个值
        if (temp < nums[i + 1]) {
            return true
        }
    }
    return false
};


编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:



每行中的整数从左到右按升序排列。

每行的第一个整数大于前一行的最后一个整数。


示例 1:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3

输出:true


示例 2:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13

输出:false


提示:

 

m == matrix.length
    n == matrix[i].length
    1 <= m, n <= 100
    -104 <= matrix[i][j], target <= 104


Go 数组查找



func searchMatrix(matrix [][]int, target int) bool {
    m := len(matrix)
    n := len(matrix[0])
    var i = 0
    for i < m && n > 0 {
        if target == matrix[i][n-1] {
            return true
        } else if target < matrix[i][n-1] {
            n--
        } else {
            i++
        }
    }
    return false
}


javascript 暴力解法



/**
 * @param {number[][]} matrix
 * @param {number} target
 * @return {boolean}
 */
var searchMatrix = function(matrix, target) {
    for(let i=0;i<matrix.length;i++){
        for(let j=0;j<matrix[0].length;j++){
            if(matrix[i][j]===target){
                return true
            }
        }
    }
    return false
};


javascript 数组查找



/**
 * @param {number[][]} matrix
 * @param {number} target
 * @return {boolean}
 */
/*
    以二维数组左下角为原点,建立直角坐标轴。
    若当前数字大于了查找数,查找往上移一位。
    若当前数字小于了查找数,查找往右移一位。
*/
var searchMatrix = function(matrix, target) {
    let x = matrix.length-1,y = 0
    while(x>=0 && y<matrix[0].length){
        if(matrix[x][y]===target){
            return true
        }else if(matrix[x][y]>target){
            x--
        }else{
            y++
        }
    }
    return false
};
相关文章
|
7月前
|
Go
golang力扣leetcode 300.最长递增子序列
golang力扣leetcode 300.最长递增子序列
51 1
|
7月前
|
Go
golang力扣leetcode 105.从前序与中序遍历序列构造二叉树
golang力扣leetcode 105.从前序与中序遍历序列构造二叉树
61 0
|
7月前
|
Java Go C++
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
68 0
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
|
7月前
|
Java Go C++
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
65 0
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
|
7月前
|
Java Go C++
Golang每日一练(leetDay0101) 最长递增子序列I\II\个数
Golang每日一练(leetDay0101) 最长递增子序列I\II\个数
39 0
Golang每日一练(leetDay0101) 最长递增子序列I\II\个数
|
7月前
|
算法 C++ Python
Golang每日一练(leetDay0043) 单词接龙、最长连续序列、根节点到叶节点数字之和
Golang每日一练(leetDay0043) 单词接龙、最长连续序列、根节点到叶节点数字之和
45 0
Golang每日一练(leetDay0043) 单词接龙、最长连续序列、根节点到叶节点数字之和
|
7月前
|
Python Go Java
Golang每日一练(leetDay0020) 单词长度、螺旋矩阵II、排列序列
Golang每日一练(leetDay0020) 单词长度、螺旋矩阵II、排列序列
51 0
Golang每日一练(leetDay0020) 单词长度、螺旋矩阵II、排列序列
|
7月前
|
Go
golang力扣leetcode 1332. 删除回文子序列
golang力扣leetcode 1332. 删除回文子序列
37 0
|
7月前
|
Go
golang力扣leetcode 128. 最长连续序列
golang力扣leetcode 128. 最长连续序列
48 0
|
Go Cloud Native
为什么要写技术文章 | GO主题月
这个问题对于每一个人来说各有各的原因。有的为了写作变现,有的为了自己的兴趣,写小说,写文章,写书。
为什么要写技术文章 | GO主题月