二分查找&删除元素

day1 数组

二分查找

题目链接:二分查找

题目描述

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

解题思路

设置两个指针,一个指向数组头部,一个指向数组尾部。指向数组头部的不断向后遍历数组,指向数组尾部的不断向前遍历数组。直到遍历到target位为止

注意head , tail指针的取值问题,如果遇到只有一个元素的数组则更加需要注意取值。

实现代码

C

int search(int* nums, int numsSize, int target) {
   
        int head , tail;
        head =  0;  tail = numsSize - 1;
        while (head <= numsSize / 2 || tail >= numsSize / 2 ) {
   
            if (nums[head] == target) {
   
                return head;
            }
            if (nums[tail] == target) {
   
                return tail;
            }
            head++;
            tail--;
        }
        return -1;
    
}

Java

    public int search(int[] nums, int target) {
   
        int head , tail;
        head = 0; tail = nums.length - 1;
        while ( head <= nums.length / 2 || tail >= nums.length / 2 ) {
   
            if (nums[head] == target ){
   
                return head;
            }
            if (nums[tail] == target){
   
                return tail;
            }
            head++;
            tail--;
        }
        return -1;
    }

Java已经提供了二分查找的方法binarySearch(Object[] a, Object key)1

移除元素

题目链接: 移除元素

题目描述

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

解题思路

快慢指针 快指针用来指向覆盖的元素 , 慢指针用来指向被覆盖的元素

C

int removeElement(int* nums, int numsSize, int val) {
   
    for (int i = 0 ; i < numsSize ; i++) {
   
        if (nums[i] == val) {
   
            for (int j = i + 1; j < numsSize ; j++) {
   
                nums[j - 1] = nums[j];
            }
            i--;
            numsSize--;
        }
    }
    return numsSize;
}

Java

 public int removeElement(int[] nums, int val) {
   
      int n = nums.length;
      for (int i = 0; i < n ; i++ ) {
   
          if (nums[i] == val ) {
   
              for(int j =  i + 1; j < n ; j++ ) {
   
                  nums[j - 1] = nums[j];
              }
            i--;
            n--;
          }
      }
      return n;
    }


  1. public static int binarySearch(Object[] a, Object key)
    用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。 ↩︎

相关推荐

  1. 二分查找&删除元素

    2024-01-16 23:36:01       50 阅读
  2. 力扣:704. 二分查找、27. 移除元素

    2024-01-16 23:36:01       59 阅读
  3. leetcode-01-[704]二分查找[27]移除元素

    2024-01-16 23:36:01       38 阅读
  4. 二分查找.

    2024-01-16 23:36:01       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-16 23:36:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-16 23:36:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-16 23:36:01       87 阅读
  4. Python语言-面向对象

    2024-01-16 23:36:01       96 阅读

热门阅读

  1. 设计模式——桥接模式

    2024-01-16 23:36:01       56 阅读
  2. leetcode-平衡二叉树

    2024-01-16 23:36:01       52 阅读
  3. 代码随想录day29 回溯开始进入排列问题

    2024-01-16 23:36:01       54 阅读
  4. Python从入门到精通秘籍五

    2024-01-16 23:36:01       63 阅读
  5. c++关键字const

    2024-01-16 23:36:01       50 阅读
  6. 如何在 Edge 浏览器中设置自动刷新?

    2024-01-16 23:36:01       135 阅读
  7. Edge 浏览器设置自动刷新

    2024-01-16 23:36:01       51 阅读
  8. nginx使用入门的笔记

    2024-01-16 23:36:01       50 阅读