zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    Databases Questions & Answers
    SQL语句
    常见的数据库基础面试题大全
    关于GET POST
    经常遇到的浏览器兼容性问题
    关于JavaScript中apply与call的用法意义及区别(转)
    js闭包的用途
    深入理解js闭包
    undefined与null的区别
    HeapSort快速排序
  • 原文地址:https://www.cnblogs.com/gjianli/p/14279296.html
Copyright © 2011-2022 走看看