2020-01-14 数组刷题-1

题目名称:35. 搜索插入位置

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

题目描述:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 1:

输入: [1,3,5,6], 5
输出: 2

示例 2:

输入: [1,3,5,6], 2
输出: 1

示例 3:

输入: [1,3,5,6], 7
输出: 4

示例 4:

输入: [1,3,5,6], 0
输出: 0

来源:力扣(LeetCode)
博主开始思路以及实现:
1、进行数组遍历,并判断每一个值是否与目标值相等,如果相等,则返回该下标值
如果不等 则进行判断,与下标值比较是大还是小,选择合适位置,并进行插入操作
2、遍历使用for循环,判断相等还是不相等使用if进行判断,不相等在进行进一步的if判断,
判断比上一个位置小,比下一个位置大,并执行插入操作
错误实现1:

 1 class Solution {
 2 public:
 3     int searchInsert(vector<int>& nums, int target) {
 4         for (int i = 0; i < nums.size; i++){
 5             if (nums[i] == target){
 6                 std::cout << i <<std::endl;
 7                 break;
 8             }
 9             else{
10                 if(target<nums[i-1] && target>=nums[i+1]){
11                     //插入操作
12                     nums[i] = target;
13                     nums.size ++;
14                     break;
15                 }
16             }
17         }
18     }
19 };

//错误提示
Line 4: Char 29: error: reference to non-static member function must be called;
did you mean to call it with no arguments?
        for (int i=0;i<nums.size;i++){
                       ~~~~~^~~~
                                ()

错误实现2:

 1 class Solution {
 2 public:
 3     int searchInsert(vector<int>& nums, int target) {
 4         for(int i = 0; i < nums.size(); i++){
 5             if(nums[i] >= target){
 6                 return i;
 7             }
 8             else{
 9                 return nums.size();
10             }
11         }
12     }
13 };

参考&问题讲解:

https://mp.weixin.qq.com/s/fCf5QbPDtE6SSlZ1yh_q8Q

最终实现代码:

 1 class Solution {
 2 public:
 3     int searchInsert(vector<int>& nums, int target) {
 4             for(int i = 0; i<nums.size(); i++){
 5                 if(nums[i] >= target){
 6                     return i;
 7                 }
 8             }
 9             return nums.size();
10     }
11 };

存在问题:

1、审题出现错误,不需要进行插入具体操作,只需要返回插入位置即可

2、对待c++语言的使用存在很大问题(博主还未从头到尾学习C++语言)ps:<QVector>;cin cout;

3、针对二分查找的学习(二分查找的边界问题&循环不变量)

二分查找代码:

 1 class Solution {
 2 public:
 3     int searchInsert(vector<int>& nums, int target) {
 4             //二分查找的写法
 5             int n = nums.size();
 6             int left = 0;
 7             int right = n-1;
 8             while(left <= right){
 9                 int middle = left +((right - left)/2);
10                 if(target < nums[middle] ){
11                     right = middle-1;
12                 }else if(target > nums[middle]){
13                     left = middle+1;
14                 }else{//nums[middle] = target
15                     return middle;
16                 }
17             }
18             return right + 1;
19     }
20 };

 

posted @ 2021-01-14 20:52  健丽  阅读(57)  评论(0编辑  收藏  举报