【代码随想录】数组-golang

news/2024/10/25 1:53:25/

数组 from 代码随想录

二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 1:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
提示:
你可以假设 nums 中的所有元素是不重复的。
n 将在 [1, 10000]之间。
nums 的每个元素都将在 [-9999, 9999]之间。

左闭右闭

func search(nums []int, target int) int {lf,rf := 0,len(nums) - 1for lf <= rf {middle := (lf + rf)/2if nums[middle] > target{rf = middle - 1}else if nums[middle] < target {lf = middle + 1}else{return middle}}return -1
}

左闭右开

func search(nums []int, target int) int {lf,rf := 0,len(nums)for lf < rf {middle := (lf + rf)/2if nums[middle] > target{rf = middle}else if nums[middle] < target {lf = middle + 1}else{return middle}}return -1
}

移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

思路:快慢双指针

func removeElement(nums []int, val int) int {res := 0for i,total:=0,len(nums); i<total;i++{if nums[i] != val {nums[res] = nums[i]res ++ }}nums = nums[:res]return res
}

有序数组的平方

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

思路:因为是非递减数组,默认排序,所以用双指针(从首末开始),创建新数组,用指针从末尾开始写入

func sortedSquares(nums []int) []int {left,right,flag := 0,len(nums) - 1,len(nums) - 1newNums := make([]int,len(nums))for left <= right {if nums[left] * nums[left] < nums[right] * nums[right] {newNums[flag] = nums[right] * nums[right]right --}else{newNums[flag] = nums[left] * nums[left]left ++}flag --}return newNums
}

滑动窗口

给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

思路:滑动窗口,本质上为双指针(start为慢指针,end为快指针),只是取的是双指针之间(包含两端)之间的内容,以和小于target驱动end指针,以和大于等于target驱动start指针。

func minSubArrayLen(target int, nums []int) int {n := len(nums)if n == 0 {return 0}start,end,sum := 0,0,0ans := math.MaxInt32for end < n {sum += nums[end]for sum >= target {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 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

思路:先初始化一个矩阵,按顺序模拟顺时针处理,注意边界点处理

func generateMatrix(n int) [][]int {top, bottom, left, right := 0, n-1, 0, n-1num := 1tar := n * nmatrix := make([][]int, n)for i := 0; i < n; i++ {matrix[i] = make([]int, n)}for num <= tar {//上->右->下->左//上边for i := left; i <= right; i++ {matrix[top][i] = numnum++}top++//右边for i := top; i <= bottom; i++ {matrix[i][right] = numnum++}right--//下边for i := right; i >= left; i-- {matrix[bottom][i] = numnum++}bottom--//左边for i := bottom; i >= top; i-- {matrix[i][left] = numnum++}left++}return matrix
}

http://www.ppmy.cn/news/5791.html

相关文章

二叉树10:二叉树的最小深度

主要是我自己刷题的一些记录过程。如果有错可以指出哦&#xff0c;大家一起进步。 转载代码随想录 原文链接&#xff1a; 代码随想录 leetcode链接&#xff1a;111. 二叉树的最小深度 题目&#xff1a; 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近…

Jenkins + Jmeter + Ant 持续集成

搭建提前安装好&#xff1a;ant Jenkins 环境 一、Jenkins 安装 Ant 插件&#xff1a; 进入Jenkins 配置插件页面&#xff0c;安装ant 插件&#xff1a; 打开插件配置页面&#xff0c;如下图&#xff1a; 点击“Available” 在输入框搜索 ant 安装即可&#xff1a; 二、安装…

一、线程相关概念

文章目录相关概念程序(program)进程线程单线程与多线程并发与并行相关概念 程序(program) 是为完成特定任务、用某种语言编写的一组指令的集合。简单的说:就是我们写的代码。 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c…

-防火墙-

数据来源 一、防火墙的基本概念 防火墙的定义&#xff1a;是一款具备安全防护功能网络设备 ◆ 隔离网络 将需要保护的网络与不可信任网络进行隔离&#xff0c;隐藏信息并进行安全防护 防火墙基本功能&#xff1a; ◆ 访问控制 - ACL ◆ 攻击防护 ◆ 冗余设计 ◆ 路由、交…

redis 大key 防坑指南

目录 一、大key危害 二、为什么会引入大key问题 三、举例 四、如何防控 五、发生了大key问题怎么办 六、如何测试阶段暴露大key问题 一、大key危害 redis大key导致redis负载比较高&#xff0c;影响redis的性能 二、为什么会引入大key问题 存入redis数量不可控&#x…

校园文件发布系统|基于Springboot实现校园文章发布系统

作者主页&#xff1a;编程千纸鹤 作者简介&#xff1a;Java、前端、Pythone开发多年&#xff0c;做过高程&#xff0c;项目经理&#xff0c;架构师 主要内容&#xff1a;Java项目开发、毕业设计开发、面试技术整理、最新技术分享 收藏点赞不迷路 关注作者有好处 文末获得源码 …

基于事件触发的二阶多智能体领导跟随一致性

【无限嚣张&#xff08;菜菜&#xff09;】&#xff1a;hello您好&#xff0c;我是菜菜&#xff0c;很高兴您能来访我的博客&#xff0c;我是一名爱好编程学习研究的菜菜&#xff0c;每天分享自己的学习&#xff0c;想法&#xff0c;博客来源与自己的学习项目以及编程中遇到问题…

Node基础——认识Node

什么是Node 首先JavaScript是一门编程语言&#xff0c;就像Java、Python、C#、GO一样&#xff0c;在Node出来之前&#xff0c;JavaScript主要运行于浏览器中&#xff0c;用来控制页面的展示逻辑&#xff0c;以及交互操作等。JavaScript之所以能够在浏览器中执行&#xff0c;是…