• LeetCode刷题23在排序数组中查找元素的第一个和最后一个位置


    import java.util.Arrays;
    
    /**
     * 功能描述
     *
     * @author ASUS
     * @version 1.0
     * @Date 2022/8/27
     */
    public class Main06 {
        public static void main(String[] args) {
           /*
            给定一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
    
            如果数组中不存在目标值 target,返回 [-1, -1]。
    
    
            设计并实现时间复杂度为 O(log n) 的算法解决此问题。
    
    
            示例 1:
    
            输入:nums = [5,7,7,8,8,9,8,10], target = 8
    
            输出:[3,4]
            */
    
            int[] nums = new int[]{5, 7, 7, 8, 8, 9, 10};
            int target = 7;
            getTarget2(nums, target);
        }
    
        /**
         * 获取目标值  时间复杂度 O(n)
         *
         * @param nums
         * @param target
         * @return
         */
        private static void getTarget(int[] nums, int target) {
            int start = -1;
            int end = -1;
    
            for (int i = 0; i < nums.length; i++) {
                if (nums[i] == target && start == -1) {
                    start = i;
                    break;
                }
            }
    
            for (int i = nums.length - 1; i >= 0; i--) {
                if (nums[i] == target && end == -1) {
                    end = i;
                    break;
                }
            }
            System.out.println(Arrays.asList((start + "," + end).split(",")));
        }
    
        /**
         * 获取目标值 时间复杂度O(n)
         *
         * @param nums
         * @param target
         * @return
         */
        private static void getTarget2(int[] nums, int target) {
            int start;
            int end;
            String string = Arrays.toString(nums).replace(",", "").replace(" ", "");
            string = string.substring(1, string.length() - 1);
            System.out.println(string);
    
            start = string.indexOf(String.valueOf(target));
            end = string.lastIndexOf(String.valueOf(target));
    
            System.out.println(Arrays.asList((start + "," + end).split(",")));
        }
    }

    简单二分查找

    前提:数组递增或者递减且元素不同

    package exam;
    
    import java.util.Arrays;
    
    /**
     * 功能描述
     *
     * @author ASUS
     * @version 1.0
     * @Date 2022/8/27
     */
    public class Main06 {
        public static void main(String[] args) {
            int[] nums = new int[]{1, 3, 5, 7, 9, 11, 19};
            int target = 5;
            getTarget3(nums, target);
        }
    
    
        /**
         * 获取目标值-二分查找法 假设数据元素递增且不相同
         *
         * @param nums
         * @param target
         * @return
         */
        private static void getTarget3(int[] nums, int target) {
            // 左下标
            int left = 0;
            // 右下标
            int right = nums.length;
            // 中间坐标
            int center;
            // 中间坐标数值
            int tempData;
            // 标识是否找到
            boolean bool = false;
    
            while (left <= right) {
                // 取中间位置数据 做比对
                center = (left + right) / 2;
                tempData = nums[center];
    
                // 等于目标值 已找到数据
                if (tempData == target) {
                    System.out.println("left:" + center);
                    bool = true;
                    break;
                }
    
                // 小于目标值 那肯定要去右边去查
                // 需要移动left right不变
                if (tempData < target) {
                    left = center + 1;
                }
    
                // 大于目标值 那肯定要去左边去查
                // 需要移动right left不变
                if (tempData > target) {
                    right = right - 1;
                }
            }
            if (!bool) {
                System.out.println("left:" + -1);
            }
        }
    
    }
  • 相关阅读:
    Jquery实现无刷新DropDownList联动
    Mvc 提交表单的4种方法全程详解
    Sql Like 通配符 模糊查询技巧及特殊字符
    SQL 语句递归查询 With AS 查找所有子节点
    最常用的五类CSS选择器
    取出分组后每组的第一条记录(不用group by)按时间排序
    SpringCloud中接收application/json格式的post请求参数并转化为实体类
    SpringCloud负载均衡笔记
    iview-admin打包笔记
    SpringCloud之最大的坑
  • 原文地址:https://www.cnblogs.com/chch213/p/16630994.html
Copyright © 2020-2023  润新知