Day01

 今日任务 

  • 数组理论
  • 704 二分查找
  • 27 移除元素

数组理论:

  1. 数组是存放在连续内存空间上的相同类型数据的集合
  2. 数组下标都是从0开始的
  3. 数组内存空间的地址是连续的
  4. 数组的元素是不能删的,只能覆盖

问题:二维数组在内存的空间地址是连续的么?

在C++中二维数组是连续分布的;

Java是没有指针的,同时也不对程序员暴露其元素的地址,寻址操作完全交给虚拟机。二维数组的每一行头结点的地址是没有规则的,更谈不上连续


704 二分查找

题目: https://leetcode.cn/problems/binary-search/

根据 左闭右开,左闭右闭 两种区间规则 写出来的二分法

思路:前提为有序数组,根据区间规则来决定终止条件及中点 mid 的值应该如何更新


27 移除元素

题目:https://leetcode.cn/problems/remove-element/

 思路:经典的双指针问题

  1. 定义两个指针,一个快 fast,一个慢 slow
  2. 通过快指针来遍历数组,遇到 nums[fast] != target 的时候,就可以将 fast 指向的值赋给 slow 指针指向的位置,然后 fast 和 slow 都向前移动一个位置
  3. 遇到 nums[fast] == target 的时候,就是遇到要移除的元素,此时保持 fast 指针向前移动
  4. 直到快指针 fast 将数组遍历完
class Solution {
    public int removeElement(int[] nums, int val) {
        int index = 0;
        for(int num : nums) {
            if(num != val) {
                nums[index] = num;
                index++;
            }
        }
        return index;
    }
}

你可能感兴趣的:(代码随心录训练营,数据结构)