代码随想录day2 - 数组章节总结

代码随想录day2 - 数组章节总结

目录

代码随想录day2 - 数组章节总结

1、数组基础:

2、二分查找:

3、双指针法(快慢指针法):

3、滑动窗口

4、螺旋矩阵


1、数组基础:

数组在内存地址中是连续的。数组下标从0开始。数组的读取为O(1)。数组的删除为O(N)。

2、二分查找:

二分查找的思想是每次查找都从区间的中间开始查找,若middle小于target则要扩大left区间,若middle大于target则要缩小right区间。

for left <= right {
    mid := left + (right - left) / 2
    if xxx {
        left/right =  xxx
    } else {
        right/left =  xxx    
    }
}

3、双指针法(快慢指针法):

通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。

定义快慢指针

  • 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
  • 慢指针:指向更新 新数组下标的位置
    slow := 0
    for fast:=0;fast<len(nums);fast++{
        if nums[fast] != target {
            nums[slow] = nums[fast]
            slow++
        }
    }

3、滑动窗口

在本题中实现滑动窗口,主要确定如下三点:

  • 窗口内是什么?
  • 如何移动窗口的起始位置?
  • 如何移动窗口的结束位置?

窗口就是 满足其和 ≥ s 的长度最小的 连续 子数组。

窗口的起始位置如何移动:如果当前窗口的值大于s了,窗口就要向前移动了(也就是该缩小了)。

窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。

解题的关键在于 窗口的起始位置如何移动.

l, r := 0,0
count := len(nums)+1
for r < len(nums) {
    sum += nums[l]
    for sum >= target {
        count = min(count, r-l+1)
        sum -= nums[l]
        l++
    }
    r++
}

4、螺旋矩阵

模拟顺时针画矩阵的过程:

  • 填充上行从左到右
  • 填充右列从上到下
  • 填充下行从右到左
  • 填充左列从下到上

由外向内一圈一圈这么画下去。

//上下左右
top, bottom,left,right := 0,n-1,0,n-1
//构建矩阵
matrix := make([][]int,n)

num := 1
tar := n*n

for num <= tar {
    for i:=left;left<=right;i++{    // 往哪哥方向走就用它的值啊
        matrix[top][i] = num    // 注意看是行在变还是列在变
        num++    
    }
    top--    //填充完一行后要对应--或者++
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值