首页 > 其他分享 >代码随想录-数组

代码随想录-数组

时间:2023-01-28 11:35:14浏览次数:39  
标签:return target nums int 代码 随想录 middle 数组 left

数组是一个非常基础的数据类型。

数组是存放在连续内存空间上的相同类型数据的集合。
下标从零开始,且元素从只能被覆盖不能被删除。

题单

  • 704. 二分查找

704. 二分查找

题目:给定一个排好序的一维数组和一个查找目标,需要给出目标在数组中的下标,若无则返回-1。

递归-我的解

我通过递归完成了这一题。但观察官方是通过循环完成的。循环可以减少方法栈的开销,比递归更好。

class Solution {
    public int search(int[] nums, int target) {
        return searchWithIndex(nums, target, 0, nums.length - 1);
    }
    public int searchWithIndex(int[] nums, int target, int left, int right){
        if(left > right){
            return -1;
        }
        int middle = (int) (left + right) / 2;
        if( nums[middle] == target ){
            return middle;
        }else if( nums[middle] > target ){
            return searchWithIndex(nums, target, left, middle - 1);
        }else{
            return searchWithIndex(nums, target, left + 1, right);
        }
    }
}

循环

所以我通过循环实现一次。

class Solution {
    public int search(int[] nums, int target) {
        int left = 0, right = nums.length - 1;
        while(left <= right ){
            int middle =  (left + right) / 2;
            if( nums[middle] > target ){
                right = middle - 1;
            }else if( nums[middle] < target ){
                left = middle + 1;
            }else{
                return middle;
            }
        }
        return -1;
    }
}

 

结果对比

 

 结果显示循环确实更快,但是内存并没有更低。我觉得递归方法栈的开销应该比循环体的开销大啊。【挖坑待填】

 

标签:return,target,nums,int,代码,随想录,middle,数组,left
From: https://www.cnblogs.com/qiuye98/p/17069936.html

相关文章