关闭

Search Insert Position

97人阅读 评论(0) 收藏 举报
分类:

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

You may assume no duplicates in the array.

Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0
题目意思大概是,给一个数组和一个元素,如果这个元素在数组中存在,则给出这个元素在数组中的下标,如果这个元素不在数组中,则把这个元素插入数组中的正确位置后给出元素在数组中为下标。

public class SeachPosition {    
    public static  int searchInsert(int[] nums, int target) {
        int length = nums.length;
        //判断target这个元素是否存在数组中,若存在则返回其下标位置
        for(int i = 0 ;i < length; i++){
            if(nums[i] == target){
                return i;
            }
        }
        //新建一个数组,用来做加入target的容器
        int[] num = new int[length+1];
        for(int i = 0;i < length;i++){
            num[i]= nums[i];
        }
        num[length] = target;
        //对新数组进行排序
        Arrays.sort(num);
        //获取排序后的target的下标
        for(int i = 0; i< length+1; i++){
            if(num[i]== target){
                return i;
            }
        }
        return 0;
    }
    public static void main(String[] args) {
        int[] nums={1,3,4,7};
        int target = 2;
        int result = searchInsert(nums, target);
        System.out.println(result);
    }

}

使用折半查找果然快了很多,我又傻逼了

 public static int searchInsert(int[] nums, int target) {
       int length = nums.length-1;
        int i = 0;
        while(i<=length){
            int mid = (int)((i+length)/2);
            if(target == nums[mid]){
                return mid;
            }else if(target > nums[mid]){
                i = mid +1;
            }else{
                length = mid - 1;
            }
        }
        return i;
    }
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1497次
    • 积分:110
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类