34. Search for a Range

很普通的二分查找吧

public class Solution {
    public int[] searchRange(int[] nums, int target) {

        int start = 0;
        int middle = 0;
        int end = 0;
        int []xy = new int[2];//xy[0]是范围的第一个值,xy[1]是范围的第二个值
        if(nums.length==0){
            xy[0]=-1;
            xy[1]=-1;
            return xy;
        }
        int i=0,j=nums.length-1;
        while(i<j){//二分查找,内部不判断是否命中
            middle = i+(j-i)/2;
            if(nums[middle]>target){
                j = middle - 1; 
            }else if(nums[middle]==target){
                j = middle;
                break;
            }else{
                i = middle+1;
            }
        }//默认情况如果有值,命中的值的下标都是j
        start = j;
        end = j;

        if(j<0||j>nums.length-1||nums[j]!=target){//这个是判断是否有这个值
            xy[0]=-1;
            xy[1]=-1;
            return xy;
        }
        for(i=j-1;i>=0;i--){
            if(nums[i] == nums[j])
                start=i;
            else
                break;
        }
        for(i=j+1;i<nums.length;i++){
            if(nums[i] == nums[j])
                end=i;
            else 
                break;
        }
        xy[0]=start;
        xy[1]=end;
        return xy;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sure, here's the previous implementation of BST: ```python class Node: def __init__(self, key): self.left = None self.right = None self.val = key class BST: def __init__(self): self.root = None def insert(self, key): self.root = self._insert(self.root, key) def _insert(self, node, key): if node is None: return Node(key) else: if key < node.val: node.left = self._insert(node.left, key) else: node.right = self._insert(node.right, key) return node def search(self, key): return self._search(self.root, key) def _search(self, node, key): if node is None or node.val == key: return node elif key < node.val: return self._search(node.left, key) else: return self._search(node.right, key) ``` And here's the implementation of `range_search`: ```python def range_search(bst, r): result = [] _range_search(bst.root, r[0], r[1], result) return result def _range_search(node, min_val, max_val, result): if node is None: return if min_val <= node.val <= max_val: _range_search(node.left, min_val, max_val, result) result.append(node.val) _range_search(node.right, min_val, max_val, result) elif node.val < min_val: _range_search(node.right, min_val, max_val, result) else: _range_search(node.left, min_val, max_val, result) ``` The `range_search` function takes a BST and a range `r` as input. It initializes an empty list `result` which will contain the nodes within the range. `_range_search` is a recursive helper function. It takes a node, a minimum value `min_val`, a maximum value `max_val`, and the `result` list as input. If the node is within the range, it recursively calls itself on the left and right subtrees, adds the node's value to the result list, and then recursively calls itself on the left and right subtrees again. If the node's value is less than the minimum value of the range, it only recursively calls itself on the right subtree. If the node's value is greater than the maximum value of the range, it only recursively calls itself on the left subtree. Finally, the `range_search` function calls `_range_search` on the root node of the BST and returns the result list.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值