算法day1

92 阅读1分钟

开始学习啦!第一天!

题目:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 `

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1

题目说是排好序的,直接二分查找,若是无序的,则先进行一次冒泡排序。

//冒泡排序
for(i = 0; i < n; i++){
    for(j = 0; j < n-i-1; j++){
        if(nums[j] > nums[j + 1]){
            //交换
            temp = nums[j];
            nums[j] = nums[j+1];
            nums[j+1] = temp;
        }
    }
}
    //二分查找
    //需要查找的值为x
    int x = scanner.nextInt();
    int low = 0, mid = 0, high = n-1;
    while(low <= high){
        mid = (low + high)/2;
        if(x == nums[mid]){
            return mid;
        }
        else if(x > nums[mid]){
            low = mid + 1;
        }
        else {
            high = mid -1;
        }
    }
    return -1;
}