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
  • 相关阅读:
    微信小程序HTTPS
    微信商城-1简介
    va_list
    Event log c++ sample.
    EVENT LOGGING
    Analyze Program Runtime Stack
    unknow table alarmtemp error when drop database (mysql)
    This application has request the Runtime to terminate it in an unusual way.
    How to check if Visual Studio 2005 SP1 is installed
    SetUnhandledExceptionFilter
  • 原文地址:https://www.cnblogs.com/cing/p/7498502.html
Copyright © 2011-2022 走看看