小工具知识网

当前位置: 首页 > 行业知识 > 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素(JAVA)

行业知识

代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素(JAVA)

2026-11-11 22:22:43 来源:互联网转载

文章目录

  • 数组理论基础
  • 704. 二分查找
    • 1.解题思路
    • 2.代码
    • 三、移除元素
      • 1.解题思路
      • 2.代码对比
      • ���结

        数组理论基础

        1.空间上连续,假如需要插入或删除元素则后续所有元素都要改变位置

        ()

        2.数组下标从0开始

        3.数组元素只能覆盖不能删除

        ()

        4.二维数组地址在C++中是连续的


        704. 二分查找

        给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

        示例 1:

        • 输入: nums = [-1,0,3,5,9,12], target = 9
        • 输出: 4
        • 解释: 9 出现在 nums 中并且下标为 4

          示例 2:

          • 输入: nums = [-1,0,3,5,9,12], target = 2
          • 输出: -1
          • 解释: 2 不存在 nums 中因此返回 -1

            1.解题思路

            在有序数组中,设置左右两个标志划定范围区间(左闭右闭、左闭右开)、不断取中心值与目标对比,折半查找

            注意区间开闭与判断条件是否等于、左右是否包含middle的关系

            闭区间移动包含middle、开区间不包含middle

            2.代码

            class Solution {//左闭右闭    public int search(int[] nums, int target) {        int left=0;         int right=nums.length-1;        int middle=0;        while(left  //左闭右闭、等号有意义、左右区间都不包含middle            middle = (left+right)/2;            if(nums[middle]target){  // 左区间                right=middle-1;            }            else if(nums[middle]// 右区间                left = middle+1;            }            else if(nums[middle] == target){                return middle;            }        }        return -1;    }}    //左闭右开    public int search(int[] nums, int target) {        int left=0;         int right=nums.length;        int middle=0;        while(left    //左闭右开时等号无意义            middle = (left+right)/2;            //middle = left + ((right - left)  1);            if(nums[middle]>target){  // 左区间,右边界包含middle                right=middle;            }            else if(nums[middle]// 右区间,左边界不包含middle                left = middle+1;            }            else if(nums[middle] == target){                return middle;            }        }        return -1;    }}//暴力    public int removeElement(int[] nums, int val) {        int n=nums.length, i=0, j=0;        for(i=0; i            if(nums[i]==val){                                for(j=i+1; j                    nums[j-1]=nums[j];                }                i--;// 后面元素往前了一位                n--;// 总数减一            }                    }        return n;    }}// 双指针法(快慢指针法)    public int removeElement(int[] nums, int val) {        int slow = 0, fast = 0;        for(fast = 0; fast            if(nums[fast] != val){                nums[slow]=nums[fast];                slow++;            }        }        return slow;    }}

上一篇:怎么在服务器启动nodejs?

下一篇:揭秘下机真相,究竟何为下机含义?