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
};
相关文章
|
1月前
|
Go
golang语言之go常用命令
这篇文章列出了常用的Go语言命令,如`go run`、`go install`、`go build`、`go help`、`go get`、`go mod`、`go test`、`go tool`、`go vet`、`go fmt`、`go doc`、`go version`和`go env`,以及它们的基本用法和功能。
36 6
|
1月前
|
存储 Go
Golang语言基于go module方式管理包(package)
这篇文章详细介绍了Golang语言中基于go module方式管理包(package)的方法,包括Go Modules的发展历史、go module的介绍、常用命令和操作步骤,并通过代码示例展示了如何初始化项目、引入第三方包、组织代码结构以及运行测试。
39 3
|
2月前
|
Go 开发者
|
3月前
|
运维 监控 测试技术
Golang质量生态建设问题之接入并使用Go单元测试插件的问题如何解决
Golang质量生态建设问题之接入并使用Go单元测试插件的问题如何解决
|
2月前
|
监控 Serverless Go
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
|
3月前
|
测试技术 Shell Go
Golang质量生态建设问题之Go语言的单元测试的问题如何解决
Golang质量生态建设问题之Go语言的单元测试的问题如何解决
|
4月前
|
Go
The “gopls“ command is not available. Run “go get -v golang.org/x/tools/gopls“ to install.【已解决】
The “gopls“ command is not available. Run “go get -v golang.org/x/tools/gopls“ to install.【已解决】
51 3
|
4月前
|
Go
【golang】Go 判断字符串是否包含指定字符
【golang】Go 判断字符串是否包含指定字符
60 1
|
5月前
|
分布式计算 Java Go
Golang深入浅出之-Go语言中的分布式计算框架Apache Beam
【5月更文挑战第6天】Apache Beam是一个统一的编程模型,适用于批处理和流处理,主要支持Java和Python,但也提供实验性的Go SDK。Go SDK的基本概念包括`PTransform`、`PCollection`和`Pipeline`。在使用中,需注意类型转换、窗口和触发器配置、资源管理和错误处理。尽管Go SDK文档有限,生态系统尚不成熟,且性能可能不高,但它仍为分布式计算提供了可移植的解决方案。通过理解和掌握Beam模型,开发者能编写高效的数据处理程序。
220 1
|
5月前
|
缓存 测试技术 持续交付
Golang深入浅出之-Go语言中的持续集成与持续部署(CI/CD)
【5月更文挑战第5天】本文介绍了Go语言项目中的CI/CD实践,包括持续集成与持续部署的基础知识,常见问题及解决策略。测试覆盖不足、版本不一致和构建时间过长是主要问题,可通过全面测试、统一依赖管理和利用缓存优化。文中还提供了使用GitHub Actions进行自动化测试和部署的示例,强调了持续优化CI/CD流程以适应项目需求的重要性。
166 1