zoukankan      html  css  js  c++  java
  • 35.Search Insert Position

    题目链接https://leetcode.com/problems/search-insert-position/description/

    题目大意:给出一串升序数组和一个整数,在这个数组中找出整数所在的位置,若数组中没有该整数,则给出该整数应该插入的位置(仍保持有序)。

    法一:直接遍历一遍数组,找到则返回下标,找不到则返回应该插入的下标值。时间复杂度为o(n)。

    1         for(int i = 0; i < nums.length; i++) {
    2             if(nums[i] == target) {
    3                 return i;
    4             }
    5             else if(target < nums[i]) {
    6                 return i;
    7             }
    8         }
    9         return nums.length;
    View Code

    法二:由于是有序数组,则采用二分查找的办法,时间复杂度为o(log2n)。

     1         int length = nums.length;
     2         if(length == 1) {//处理特殊情况,也就是数组中只有一个数字的情况
     3             if(target <= nums[0]) {
     4                 return 0;
     5             }
     6             else {
     7                 return 1;
     8             }
     9         }
    10         int low = 0;
    11         int high = length - 1;
    12         int mid = (low + high) / 2;
    13         while(low < high) {//二分查找
    14             if(nums[mid] == target) {
    15                 return mid;
    16             }
    17             else if(target < nums[mid]) {
    18                 if(mid > 0 && target > nums[mid - 1]) {
    19                     return mid;
    20                 }
    21                 else if(mid > 0 && target == nums[mid - 1]) {
    22                     return mid - 1;
    23                 }
    24                 else {
    25                     high= mid - 1;
    26                 }
    27             }
    28             else if(target > nums[mid]) {
    29                 if(target < nums[mid + 1]) {
    30                     return mid + 1;
    31                 }
    32                 else if(target == nums[mid + 1]) {
    33                     return mid + 1;
    34                 }
    35                 else {
    36                     low = mid + 1;
    37                 }
    38             }
    39             mid = (low + high) / 2;
    40         }
    41         if(low == 0) {//处理特殊情况,当要插入在第一个位置时
    42             return low;
    43         }
    44         return nums.length;//当要插入在最后一个位置时
    View Code
  • 相关阅读:
    Python爬虫的开发
    JSON
    XPath
    w3c
    Python I/O操作
    【转】C语言中DEFINE简介及多行宏定义
    【转】C++中#if #ifdef 的作用
    srand()、rand()、time()函数的用法
    排序算法之冒泡排序、选择排序
    Java Spring学习笔记
  • 原文地址:https://www.cnblogs.com/cing/p/7498502.html
Copyright © 2011-2022 走看看