写点什么

代码随想录训练营 Day01

作者:jjn0703
  • 2023-06-28
    江苏
  • 本文字数:1289 字

    阅读完需:约 4 分钟

概述

第一天主要学习的是数组相关的内容,相关学习的内容包括数组的基本特性的学习,二分搜索方法的学习。

概念

数组特点

数组的基本特点包括:

  • 下标从 0 开始

  • 内存连续性(Java 中定义数组需要直接声明其空间大小)

  • 数组元素不可以删,只能覆盖

  • ArrayList 底层是数组实现,其实际上应该叫一种容器

  • 二维数组,array[i][j], 指的是 i 行 j 列的元素,后续会有二维数组上的相关题目,如搜索等。

  • 哈希表结构也会用到数组,如果确认元素范围,比如字母 a-z,不妨定义 boolean 数组,通过数组快速判断元素是否存在过。

    public static void main(String[] args) {        boolean[] visited = new boolean[26];        String input = "abcdaz";        for (char c : input.toCharArray()) {            if (visited[c - 'a']) {                System.out.println("字母" + c + "重复");            }            visited[c - 'a'] = true;        }    }
复制代码

相关的 API

此前发现有的公司会要求在编辑器里面写代码,平常习惯了有 IDE 的提示,一下子忽然没了 IDE,设置连几个常见的 API 都搞混淆了。再记录一下:

    public static void main(String[] args) {        // 数组的长度, API是 .length        boolean[] visited = new boolean[26];        System.out.println("visited.length = " + visited.length);        // String的长度, API是 .length()        String s = "example";        System.out.println("s.length() = " + s.length());        // 集合类型的大小,API是 .size()        List<Integer> result = List.of(1, 2, 3);        System.out.println("result.size() = " + result.size());    }
复制代码

经典题型

  • 纯编程题

  • 二分查找

  • 需要数组有序

  • 套二分法模板

  • 双指针

作业题

class Solution {    public int search(int[] nums, int target) {        int low = 0, high = nums.length - 1;        while(low <= high) {            // 不直接使用(high+low)/2,避免加法越界的问题            int mid = low + (high - low) / 2;            // 找到目标,直接返回            if(nums[mid] == target) {                return mid;            }            // 当前的中间值比目标大,说明目标在左半边,故缩小区间到 [left, mid - 1]            if(nums[mid] > target) {                high = mid -1;            } else {                // 当前的中间值比目标小,说明目标在右半边,故缩小区间到 [mid + 1, right]                low = mid + 1;            }        }        // 未找到目标,返回-1        return -1;    }}
复制代码
class Solution {    public int removeElement(int[] nums, int val) {        int left = 0;        for(int right = left; right < nums.length; right++) {            // 非待删除的元素,进行搬迁            if(nums[right] != val) {                nums[left] = nums[right];                left++;            }        }        return left;    }}
复制代码


发布于: 刚刚阅读数: 3
用户头像

jjn0703

关注

Java工程师/终身学习者 2018-03-26 加入

USTC硕士/健身健美爱好者/Java工程师.

评论

发布
暂无评论
代码随想录训练营Day01_算法_jjn0703_InfoQ写作社区