剑指offer 数组

1.排序数组中的两个数字之和

思路:双指针思路,一前一后,当两个值相加大于target时后指针前移,小于target时前指针后移.

2.数组中和为0的三个数

思路:先排序,三指针,先定位一个指针,其余双指针一前一后扫描,查看每次定位三数之和是否为0,前两个指针都需要排除值相同的情况,以避免查找结果相同。

3.和大于或等于k的最短子数组

思路:双指针一前一后分别指向最短子数组的首尾,先移动右指针,直到子数组大于k,然后移动左指针,直到子数组小于k,目的是寻找最短数组。

4 乘积小于k的子数组

思路:两指针一前一后分别指向子数组首尾,每次移动右指针后,如果两指针间乘积大于等于k,则移动左指针,直到,乘积小于k,此时总个数比右指针在前一位置时大right-left+1.

5.和为k的子数组

思路:右指针j向右移动,每次移动用哈希表记录前j个数字之和sum,并查看是否有从头到i的位置的数字之和为sum-k,有则说明从j+1到i的位置上数字之和为k.

6.0和1个数相同的子数组

思路:首先要吧0变为-1,从左到右遍历,并记录每个位置j,前j个数的总和对应下表j,当之后遍历到的位置前k个数之和等于前j个数之和是,说明j+1到k上的0和1相同。

7.左右两边子数组的和相等

思路:首先记录整个数组之和,从左到右遍历,若该位置左边之和等于总和减去左边之和,则返回该位置

8.二维子矩阵的数字之和

思路:先预处理一个sums二维数组,sums[i][j]表示左上角左边为(0,0)右下角坐标为(i,j)的矩阵中数字之和,因此所求矩阵等于

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值