• Leetcode刷题Day1----数组


    Leetcode刷题Day1----数组

    1. 数组理论基础
    • 文章链接:https://programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html
    2. 二分法查找 https://leetcode.cn/problems/binary-search/ (Leetcode 704)
    • 题目链接:https://leetcode.cn/problems/binary-search/
    • 文章讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html
    • 视频讲解:https://www.bilibili.com/video/BV1fA4y1o715

    两种方法:左闭右闭 & 左闭右开

    • 左闭右闭:【1,1】该数组成立
      right=长度-1;
      while(left<=right)
      更新left=mid+1;
      更新right=mid-1;
    class Solution {
        public int search(int[] nums, int target) {
            int left=0;
            int right=nums.length-1;
            while(left<=right){
                int mid=(left+right)/2;
                if(nums[mid]>target) right=mid-1;
                else if(nums[mid]<target) left=mid+1;
                else return mid;
            }
            return -1;   
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 左闭右开:【1,1)不成立 ,【1,2)成立
      right=长度;
      while(left 更新left=mid+1;因为左边是闭合的,所以更新左区间是要+1
      更新right=mid;
    class Solution {
        public int search(int[] nums, int target) {
            int left=0;
            int right=nums.length;
            while(left<right){
                int mid=(left+right)/2;
                if(nums[mid]>target) right=mid;
                else if(nums[mid]<target) left=mid+1;
                else return mid;
            }
            return -1;   
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    相关题目:35.搜索插入位置 & 34. 在排序数组中查找元素的第一个和最后一个位置 & 69.x 的平方根
    & 367.有效的完全平方数

    3. 移除元素(Leetcode 27)
    • 题目链接:https://leetcode.cn/problems/remove-element/
    • 文章讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html
    • 视频讲解:https://www.bilibili.com/video/BV12A4y1Z7LP

    两种方法:暴力循环 & 双指针

    • 法一:暴力解法,两层for循环,第一层找到等于value的下标,第二层将value后面的数值依次移到从value的位置开始的数组
    • 法二:双指针法,快指针来判断是否该值等于value,当不等于时,就把该值给慢指针指向的值,再让快慢指针都跑,如果等于就不赋值了,只让快指针跑。返回值是slow的位置,因为slow代表着新数组结束的点—不能用 length因为后面数组其实还有值的。
    class Solution {
        public int removeElement(int[] nums, int val) {
            int fast=0;
            int slow=0;
             while(fast<nums.length){
                 if(nums[fast]!=val){
                     nums[slow]=nums[fast];
                     slow++;
                 }
                 fast++;
             }
             return slow;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    C#生成自定义海报
    开源项目研读AXIOM camera
    测试/开发程序员该不该跳槽?别忘了当初的梦想......
    人工智能与深度神经网络,人工智能人工神经网络
    并发编程之CompletableFuture全网最细最全用法(一)
    操作系统笔记(王道考研) 第三章:内存管理
    vue对于低版本浏览器兼容问题
    儿童玩具和儿童用品美国CPC认证ASTM测试CPSIA标准大合集
    新版 Next.js 从入门到入土
    SpringBoot的使用
  • 原文地址:https://blog.csdn.net/qq_43563187/article/details/127891274