LeetCode–数组

LeetCode–数组

日积月累,坚持每天更新
刷完题后不单单是能够把题做出来,更重要的是需要从这个题里面学到什么方法,仅此在这里记录下自己的想法总结

一、数组-双指针法

26. 删除排序数组中的重复项

26.1 题目:
在这里插入图片描述
26.2 结题
在这里插入图片描述
26.3 总结:

  • 题目要求原地删除、修改输入数组,就是直接在输入的数组上面操作,不用再借助额外的存储空间,从而达到空间复杂度为:O(1)
  • 双指针按照我的理解有点像在数组上有两个人,一个人(快指针)负责出去找新的元素,另外一个人(慢指针)负责存储有用的,自己需要的元素。当寻找的那个人,将数组中元素全部寻找一遍之后,负责存储的那个人那里就是全部自己需要的元素了。
  • 上面的题解还可以继续优化,当数组没有重复元素时,就会进行不必要的元素复制,可以在元素复制之前添加一个判断,判断之间的间隔是否大于1,若大于1,则说明中间有空元素,需要进行复制

二、二分查找

35、搜索插入位置

题目
在这里插入图片描述
题解
在这里插入图片描述

class Solution {
    public int searchInsert(int[] nums, int target) {
        int left = 0, right = nums.length - 1;
        while(left <= right) {		//边界条件是left小于等于right
            int mid = (left + right) / 2;
            if(nums[mid] == target) {
                return mid;
            } else if(nums[mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return left;
    }
}


总结

  • 是在图解算法这本书里面看过的二分查找,讲的还是比较清晰易懂,当时是在上班途中地铁上看的,并没有具体实践,这次做题正好遇见二分查找的题目
  • 使用的条件就是首先满足数字是排好顺序的,然后找其中某个数字的位置,这一类相关的感觉都可以使用,最主要的好处就是比暴力遍历要快,时间复杂度变为O(logn),随着数据量的变大,时间并不会呈爆炸式增长
  • 二分查找使用并不困难,有点类似递归,有点麻烦的在于递归边界条件,这道题里面可以举几个例子,就不难看出当left=right时,虽然比较特殊,但还是可以进行比较的,之后再往下进行循环递归,就会出现left>right,这显然不满足我们最开始的假设,所以边界条件就设为left<=right
//二分查找模板
class Solution {
    public int searchInsert(int[] nums, int target) {
        int left = 0, right = nums.length - 1; // 注意
        while(left <= right) { // 注意
            int mid = (left + right) / 2; // 注意
            if(nums[mid] == target) { // 注意
                // 相关逻辑
            } else if(nums[mid] < target) {
                left = mid + 1; // 注意
            } else {
                right = mid - 1; // 注意
            }
        }
        // 相关返回值
        return 0;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值