代码随想录 leetCode 数组

花了三天才把数组部分刷完,收获很大!还有好多点需要复盘,下周!

二分法
  1. 左闭右闭[left,right] while(left< = right) 左右相等是有意义的 如果mid>target, mid=right-1; 如果mid<target, mid=left+1;

  2. 左闭右开[left,right) while(lefttarget, mid=right; 如果mid<target, mid=left+1;

移除元素
  1. 暴力解法 两个for循环,第一遍找出元素,第二遍数组更新

  2. 双指针解法(快慢指针) 慢指针遍历,快指针没有遇到指定元素,就跟随满指针一起往后走;遇到指定元素,就不动

有序数组的平方

我的思路:类似于冒泡排序

  1. 暴力排序 C#.NET中ToArray 将IEnumerable转换为数组 Select 是LINQ中的一种投影操作方法 | 把原数组的元素按照你的要求变成新内容 return (nums.Select(x=>x*x).OrderBy(x=>x).ToArray());

  2. 双指针 思路:因为是非递减的数组,所以最大的平方数一定出现在最前面或最后面 新建一个长度大小相同的数组,前后各一个指针,不断比较,较大的移到后面的指针

长度最小的子数组

采用滑动窗口 思路:

  1. 确定滑动窗口起始值、滑动窗口总和、滑动窗口大小值

  2. 滑动终止值不断后移遍历,如果遇到总和比目标总和大,滑动窗口开始值向后移

  3. 总而言之,比目标总和大,开始值后移;比目标总和小,终止值后移

螺旋数组||

思路:全程采用左闭右开原则

  1. 左到右→上到下→右到左→下到上 循环到结束为止

  2. 需要确定一共走多少圈、每1/4圈走多少格,每一大圈起始位置xy的坐标,设置变量

  3. 需要定义的变量: offset:记录当前圈数与n的差值,用于确定边界 loop:需要循环的圈数 startx/starty:每循环一个圈的起始位置

区间和

思路:

构建前缀和数组prefixsum 对于[a,b]区间内的总和,可以用计算式:sum(a,b)=prefixsum[b+1]-prefixsum[a];

Java读数的写法 Java

nextInt():读取一个整数

hasNext() :检查输入中是否还有下一个值可以读取

  1. 读取数组长度

  2. 读取数组元素

  3. 构建前缀和数组,prefixsum记录截至每个当前数的所有前数总和

  4. 持续读取 a,b 区间并输出对应的区间和

开发商购买土地

二维前缀和 思路:

  1. 输入数组

  2. 构建二维前缀和,确定总的总和

  3. 横向切割,获取上面部分总和,最后算出上下两部分的差值并比较

  4. 纵向切割,获取下面部分总和,最后算出上下两部分的差值并比较

  5. 输出结果

前缀和:

一维前缀和的核心公式:pre[i+1] = pre[i] + a[i];

二维前缀和的核心公式:pre[i+1][j+1] = pre[i][j+1] + pre[i+1][j] - pre[i][j] + grid[i][j];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值