分门别类刷算法,坚持,进步!

刷题路线参考:https://github.com/chefyuan/algorithm-base

      https://github.com/youngyangyang04/leetcode-master/

大家好,我是老三,一个刷题困难户,接下来我们开始数组类型算法的刷题之旅!

数组

数组基础

数组基本上是我们最熟悉的数据结构了,刚会写“Hello World”不久,接着就是“杨辉三角”之类的练习。

数组基本结构

  • 数组是存放在连续内存空间上的相同类型数据的集合

数组结构

上图是一个字符数组的例子。

因为内存空间连续,所以可以直接通过下标获取对应的元素。

但是删除就麻烦一点,相当于填坑,一个元素被移走,留下的坑,需要其它元素来填上。

删除元素

在Java中,多维数组的存储本质上也是一个行优先的一维数组。

数组是引用传递

我们都知道,在Java中的 “=” 用在基本数据类型上,是值传递,用在引用数据类型上,是引用传递。

这一块展开可以写一篇文章,我们只简单看个例子:

public class ArrayTest {

    public static void main(String[] args) {
        int[] array = {1, 2, 3};
        int[] newArray = array;
        newArray[1] = 0;
        //结果: 1 0 3
        printArray(array);
        //结果: 1 0 3
        printArray(newArray);
    }


    static void printArray(int[] data) {
        for (int d : data) {
            System.out.print(d + " ");
        }
        System.out.println();
    }
}

大家可以看到,newArray改变了,array也跟着变了。

为什么呢?

在Java中,数组是引用数组类型。array、newArray都是存储在栈中的引用,它们指向堆中真正存储的数组对象。

所以改变了newArray,实际是改变了newArray指向的数组。

数组引用传递

这一点是我们刷题需要注意的,复制数组需要在循环中一个个复制。

好了,接下来,让我们愉快地开始刷题吧!

二分查找

LeetCode704. 二分查找

☕ 题目:704. 二分查找 (https://leetcode-cn.com/problems/binary-search/)

❓ 难度:简单

版权声明:本文为three-fighter原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/three-fighter/p/15113476.html