zoukankan      html  css  js  c++  java
  • 34. Search for a Range

    一句话思路:新建数组存储位置,输出数组

    一刷报错:

    1. 是nums[mid],nums[start/end]和target的关系,不是mid start end和target的关系
    2. 右边界 start end调换后,不对

    二刷改了小格式之后ac:

    1. 数组定义时,举例出元素的时候没有等号。return new int[]  {-1, -1};
    2. 是start end=bound[0,1],不是target=bound[0,1]。别粗心。

    总结:bound[0],是从前往后查找的,从前开始查。

             bound[1],是从后往前查找的,从后开始查。

    风格上:

    1. 数组里面的数之间要有空格。
    2. 每次声明一个变量 int a; 

                intb;

    1. if 后面要加空格!!
    class Solution {
        public int[] searchRange(int[] nums, int target) {
            if (nums.length == 0) {
                return new int[]{-1, -1};
            }
            
            int start;
            int end;
            int mid;
            int []bound = new int[2];
            
            //search for the left bound
            start = 0;
            end = nums.length - 1;
            while (start + 1 < end) {
                mid = start + (end - start) / 2;
                if (nums[mid] == target) {
                    end = mid;
                }
                if (nums[mid] < target) {
                    start = mid;
                }
                if (nums[mid] > target) {
                    end = mid;
                }
            }
            //System.out.println("start1="+start);
            //System.out.println("end1="+end);
            
            if (nums[start] == target) {
                bound[0] = start;
            }
            else if (nums[end] == target) {
                bound[0] = end;
            }
            else {
                bound[0] = -1;
                bound[1] = -1;
            }
            //System.out.println("bound[0]="+bound[0]);
            
            //search for the right bound
            end = 0;
            start = nums.length - 1;
            while (end + 1 < start) {
                mid = end + (start - end) / 2;
                if (nums[mid] == target) {
                    end = mid;
                }
                if (nums[mid] < target) {
                    end = mid;
                }
                if (nums[mid] > target) {
                    start = mid;
                }
            }
            //System.out.println("start2="+start);
            //System.out.println("end2="+end);
            
            if (nums[start] == target) {
                bound[1] = start;
            }
            else if (nums[end] == target) {
                bound[1] = end;
            }
            else {
                bound[0] = -1;
                bound[1] = -1;
            }
            //System.out.println("bound[1]="+bound[1]);
            
            return bound;
        }
    }
  • 相关阅读:
    基础数论--例题
    基础数论--扩展欧几里得算法
    基础数论--欧拉定理,逆元
    基础数论--快速幂
    基础数论--欧拉函数
    基础数论--约数
    数论基础--质数
    图算法--二分图的最大匹配(匈牙利算法)
    WEB/APP开发基础之旅--网页布局
    WEB/APP开发基础之旅--HTML入门2
  • 原文地址:https://www.cnblogs.com/immiao0319/p/7877497.html
Copyright © 2011-2022 走看看