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

 

posted on 2017-09-09 16:05  二十年后20  阅读(212)  评论(0编辑  收藏  举报

导航