代码随想录训练营day2

news2024/10/7 18:30:55

问题一:长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0

输入

输出

target = 7, nums = [2,3,1,2,4,3]

2

target = 4, nums = [1,4,4]

1

思路一:暴力

遍历n*i次数组,分别求每个连续子数组的和,如果大于则记录长度,注意是连续子数组,不是子数组。

思路二:前缀和+二分查找

前缀和保留数组前n项元素的和,则有sum[i-1]+s = x ,二分查找寻找x在sum[i]可能出现的位置,只要位置大于等于0,则说明存在记录下标与i之间的差值。

思路三:滑动窗口

右指针不断往前走,直到尽头,同时存储sum,循环判断sum能不能连续消除left指针的元素,如果可以左指针前进,并记录距离,右指针一直前进

代码:

//暴力

func minSubArrayLen(s int, nums []int) int {
    n:= len(nums)
    ans:=math.MaxInt
    for i:=0;i<n;i++{
        res:=0
        for j:=i;j<n;j++{
            res += nums[j]
            if res >= s{
                ans = min(ans,j-i+1)
                break
            }
        }
    }
    if ans == math.MaxInt{
        return 0
    }
    return ans
}

//前缀和
func minSubArrayLen(s int, nums []int) int {
    ans := math.MaxInt32
    n:= len(nums)
    sum:=make([]int,n+1)
    for i:=1;i<= n;i++{
        sum[i] = nums[i-1] + sum[i-1]
    }
    for i:=1;i<=n;i++{
        bigsum := s+ sum[i-1]
        lo := sort.SearchInts(sum,bigsum)
        if lo <=n && lo >0{
            ans = min(ans,lo -i +1)
        }
    }
    if ans == math.MaxInt32 {
        return 0
    }
    return ans

}
//滑动窗口
func minSubArrayLen(s int, nums []int) int {
    n := len(nums)
    if n == 0 { return 0}
    ans := math.MaxInt32
    start, end := 0, 0
    sum := 0
    for end < n {
        sum += nums[end]
        for sum >= s {
            ans = min(ans, end - start + 1)
            sum -= nums[start]
            start++
        }
        end++
    }
    if ans == math.MaxInt32 {return 0}
    return ans
}


func min(x, y int) int {
    if x < y {
        return x
    }
    return y
}

问题二:螺旋矩阵 II

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

输入

输出

n = 3

[[1,2,3],[8,9,4],[7,6,5]]

n = 1

[[1]]

思路:两种思路,归根结底,能把一个圈堵住就行

四矢量法:一共四个循环,每次走一个矢量,奇数个的话,中心堵住一个

转圈法: 转圈法的好处在于不需要处理奇数位

代码:

//四矢量法
func generateMatrix(n int) [][]int {
	arr := make([][]int, n)
	for i := 0; i < n; i++ {
		arr[i] = make([]int, n)
	}
	base_num := 1
	left, right := 0, n-1
	for left <= right {
        for i:=left;i<right;i++{
            arr[left][i] = base_num
            base_num++
        }
        for i:=left;i<right;i++{
            arr[i][right] =base_num
            base_num++
        }
        for i:=right;i>left;i--{
            arr[right][i] =base_num
            base_num++
        }
        for i:= right;i>left;i--{
            arr[i][left]= base_num
            base_num++
        }
		left++
		right--
	}
    mid := n/2
    if n % 2 == 1{
        arr[mid][mid] = base_num;
    }
	return arr
}

//转圈法
func generateMatrix(n int) [][]int {
	arr := make([][]int, n)
	for i := 0; i < n; i++ {
		arr[i] = make([]int, n)
	}
	base_num := 1
	left, right := 0, n-1
	for left <= right {
		//从左到右
		for i := left; i <= right; i++ {
			arr[left][i] = base_num
			base_num++
		}
		//从上到下
		for i := left + 1; i <= right; i++ {
			arr[i][right] = base_num
			base_num++
		}
		//从右往左
		for i := right - 1; i >= left; i-- {
			arr[right][i] = base_num
			base_num++
		}
		//从下往上
		for i := right - 1; i >= left+1; i-- {
			arr[i][left] = base_num
			base_num++
		}
		left++
		right--
	}
	return arr
}

问题三:有序数组的平方

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序

输入

输出

nums = [-4,-1,0,3,10]

[0,1,9,16,100]

nums = [-7,-3,2,3,11]

[4,9,9,49,121]

思路一:暴力求,平方,排序

思路很简单,遍历数组,Sort.Int排序

思路二:界限双指针

找到负数与非负数之间的界限,然后进行判断,两者较小的元素,然后进入数组

思路三:相向双指针+倒入结果数组

从两头开始找,如果比较这两值的大小,大的进入数组的最后一个元素,并让数组最后指针前移

代码:

//界限双指针
func sortedSquares(nums []int) []int {
    n := len(nums)
    lastNegIndex := -1
    for i := 0; i < n && nums[i] < 0; i++ {
        lastNegIndex = i
    }

    ans := make([]int, 0, n)
    for i, j := lastNegIndex, lastNegIndex+1; i >= 0 || j < n; {
        if i < 0 {
            ans = append(ans, nums[j]*nums[j])
            j++
        } else if j == n {
            ans = append(ans, nums[i]*nums[i])
            i--
        } else if nums[i]*nums[i] < nums[j]*nums[j] {
            ans = append(ans, nums[i]*nums[i])
            i--
        } else {
            ans = append(ans, nums[j]*nums[j])
            j++
        }
    }

    return ans
}

//相向双指针
func sortedSquares(nums []int) []int {
    n := len(nums)-1
    ans := make([]int, len(nums))
    lf,ri:=0,len(nums)-1

    for lf <= ri{
        x,y := nums[lf]*nums[lf],nums[ri]*nums[ri]

        if x<y{
            ans[n] = y
            ri--
        }else{
            ans[n] = x
            lf++
        }
        n--
    }
    return ans
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/800138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32 CAN控制的相关结构体

目录 CAN结构体 CAN初始化结构体 CAN发送及接收结构体 CAN筛选器结构体 CAN结构体 从STM32的CAN外设我们了解到它的功能非常多&#xff0c;控制涉及的寄存器也非常丰富&#xff0c;而使用STM32标准库提供的各种结构体及库函数可以简化这些控制过程。跟其它外设一样&#xf…

Mac配置android studio的终端terminal

一共6步 首先打开terminal 1.echo $HOME 2.touch .bash_profile 3.open -e .bash_profile 4.在弹出框中输入 export PATH${PATH}:你电脑sdk的路径/tools:你电脑sdk的路径/platform-tools 5.source .bash_profile 6.adb version 出现类似上图即为成功

将标签中某一个类别添加到另一个标签中

现在有两张CItyscapes数据集的标签&#xff0c;假设我想把第二张图骑车的人添加到第一张图&#xff0c;暂且不考虑添加位置的变换&#xff0c;那么该如何操作呢&#xff1f; 1&#xff1a;将骑车的人和车作为两个类别独立于其他的类别出来。 2&#xff1a;将这两个类别作为一个…

【LeetCode-简单】剑指 Offer 24. 反转链表(详解)

题目 定义一个函数&#xff0c;输入一个链表的头节点&#xff0c;反转该链表并输出反转后链表的头节点。 方法&#xff1a;迭代 思路 定义三个指针&#xff0c;一起往后走&#xff0c;走一步就修改mid指针的next&#xff0c;原本是mid的next 是right&#xff0c;我们修改成l…

ERROR in unable to locate ‘***/public/**/*‘ glob

前提 自己搭了一个react项目的脚手架&#xff0c;npm包下载一切都很正常&#xff0c;启动的时候突然就报ERROR in unable to locate ***/public/**/* glob这个错误&#xff0c;根据百度分析了一下产生的原因&#xff1a;webpack配置文件中的CopyWebpackPlugin导致的 网上给出的…

用Rust生成Ant-Design Table Columns | 京东云技术团队

经常开发表格&#xff0c;是不是已经被手写Ant-Design Table的Columns整烦了&#xff1f; 尤其是ToB项目&#xff0c;表格经常动不动就几十列。每次照着后端给的接口文档一个个配置&#xff0c;太头疼了&#xff0c;主要是有时还会粘错就尴尬了。 那有没有办法能自动生成colu…

Windows下安装python3教程

参考:https://blog.csdn.net/kailingr/article/details/128193083 一、安装步骤图解 准备工作&#xff1a; 进官网https://www.python.org/下载Python 安装包&#xff0c;注意&#xff1a;Python 3.9不能在Windows 7或更早版本上使用 安装&#xff1a; 1.下载完之后双击该文…

STM32 串口基础知识学习

串行/并行通信 串行通信&#xff1a;数据逐位按顺序依次传输。 并行通信&#xff1a;数据各位通过多条线同时传输。 对比 传输速率&#xff1a;串行通信较低&#xff0c;并行通信较高。抗干扰能力&#xff1a;串行通信较强&#xff0c;并行通信较弱。通信距离&#xff1a;串…

【具有非线性反馈的LTI系统识别】针对反馈非线性的LTI系统,提供非线性辨识方案(SimulinkMatlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码、Simulink仿真实现 &#x1f4a5;1 概述 本文为具有反馈非线性的LTI系统提供了一种非线性识别方案&#xff0c;这取决于输入和LTI系统输出。对于MEMS来说尤其如此&#…

uniapp:手写签名,多张图合成一张图

要实现的内容&#xff1a;手写签名&#xff0c;协议内容。点击提交后&#xff1a;生成1张图片&#xff0c;有协议内容和签署日期和签署人。 实现的效果图如下&#xff1a; 1、签名页面 <template><view class"index"><u-navbar title"电子协议…

【数据结构】实验六:队列

实验六 队列 一、实验目的与要求 1&#xff09;熟悉C/C语言&#xff08;或其他编程语言&#xff09;的集成开发环境&#xff1b; 2&#xff09;通过本实验加深对队列的理解&#xff0c;熟悉基本操作&#xff1b; 3&#xff09; 结合具体的问题分析算法时间复杂度。 二、…

Qt完成文本转换为语音播报与保存(系统内置语音引擎)(一)

一、前言 在当今数字化社会,人们对于交互式应用程序的需求越来越高。除了传统的图形用户界面,语音交互也成为了一种流行的交互方式。在这种情况下,将文本转换为语音成为了一项重要的技术,它可以为用户提供更加人性化和便捷的交互方式。在此背景下,Qt提供了QTextToSpeech类…

python测试开发面试常考题:装饰器

目录 简介 应用 第一类对象 装饰器 描述器descriptor 资料获取方法 简介 Python 装饰器是一个可调用的(函数、方法或类)&#xff0c;它获得一个函数对象 func_in 作为输入&#xff0c;并返回另一函数对象 func_out。它用于扩展函数、方法或类的行为。 装饰器模式通常用…

flask中的常用装饰器

flask中的常用装饰器 Flask 框架中提供了一些内置的装饰器&#xff0c;这些装饰器可以帮助我们更方便地开发 Web 应用。以下是一些常用的 Flask 装饰器&#xff1a; app.route()&#xff1a;这可能是 Flask 中最常用的装饰器。它用于将 URL 路由绑定到一个 Python 函数&#x…

【前端知识】React 基础巩固(三十五)——ReduxToolKit (RTK)

React 基础巩固(三十五)——ReduxToolKit (RTK) 一、RTK介绍 Redux Tool Kit &#xff08;RTK&#xff09;是官方推荐的编写Redux逻辑的方法&#xff0c;旨在成为编写Redux逻辑的标准方式&#xff0c;从而解决上面提到的问题。 RTK的核心API主要有如下几个&#xff1a; confi…

Pytorch深度学习-----神经网络的基本骨架-nn.Module的使用

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

Cadence OrCAD Capture绘制符号时缩小栅格距离的方法图文教程

🏡《总目录》   🏡《宝典目录》 目录 1,概述2,问题概述3,常规方法4,正确方法3,总结1,概述 本文简单介绍,使用Capture软件绘制原理图符号时,缩小或自定义栅格间距的方法。 2,问题概述 如下图所示,在进行原理图符号绘制时,管脚元件实体的线条等,均只能放置在栅…

佰维存储面向旗舰智能手机推出UFS3.1高速闪存

手机“性能铁三角”——SoC、运行内存、闪存决定了一款手机的用户体验和定位&#xff0c;其中存储器性能和容量对用户体验的影响越来越大。 针对旗舰智能手机&#xff0c;佰维推出了UFS3.1高速闪存&#xff0c;写入速度最高可达1800MB/s&#xff0c;是上一代通用闪存存储的4倍以…

C++ 缺省参数

1.缺省参数 一般情况下&#xff0c;函数调用时的实参个数应与形参相同&#xff0c;但为了方便地使用函数&#xff0c;C允许定义具有缺省参数的函数&#xff0c;这种函数调用时&#xff0c;实参个数可以与形参不相同。 缺省参数指在定义函数时为形参指定缺省值&#xff08;默认…

SSIS对SQL Server向Mysql数据转发表数据 (二)

1、在SQL Server数据库创建一个数据库表&#xff1a;users USE [Test1] GO/****** Object: Table [dbo].[users] Script Date: 2023/7/27 16:25:11 ******/ SET ANSI_NULLS ON GOSET QUOTED_IDENTIFIER ON GOCREATE TABLE [dbo].[users]([id] [int] IDENTITY(1,1) NOT NUL…