zoukankan      html  css  js  c++  java
  • 【LintCode】060.Search Insert Position

    题目:

    Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

    You may assume NO duplicates in the array.

    [1,3,5,6],5 → 2
    
    [1,3,5,6],2 → 1
    
    [1,3,5,6], 7 → 4
    
    [1,3,5,6],0 → 0
    

      

    题解:

    Solution 1 ()

    class Solution {
        /** 
         * param A : an integer sorted array
         * param target :  an integer to be inserted
         * return : an integer
         */
    public:
        int searchInsert(vector<int> &A, int target) {
            if (A.size() == 0) {
                return 0;
            }
            int start = 0;
            int end = A.size() - 1;
            
            while (start + 1 < end) {
                int mid = start + (end - start) / 2;
                if (A[mid] == target) {
                    return mid;
                } else if (A[mid] > target) {
                    end = mid;
                } else {
                    start = mid;
                }
            }
            if (A[start] >= target) {
                return start;
            } else if (A[end] >= target) {
                return end;
            } else {
                return end + 1;
            }
        }
    };

    Solution 2 ()

    class Solution {
        /** 
         * param A : an integer sorted array
         * param target :  an integer to be inserted
         * return : an integer
         */
    public:
        int searchInsert(vector<int> &A, int target) {
            if (A.size() == 0) {
                return 0;
            }
            int start = 0;
            int end = A.size() - 1;
            while (start + 1 < end) {
                int mid = start + (end - start) / 2;
                if (A[mid] == target) {
                    return mid;
                } else if (A[mid] > target) {
                    end = mid;
                } else {
                    start = mid;
                }
            }
            if (A[end] == target) {
                return end;
            } 
            if (A[end] < target) {
                return end + 1;
            } 
            if (A[start] >= target) {
                return start;
            }
            
            return start + 1;
        }
    };
  • 相关阅读:
    c++之类模板和函数模板的区别
    c++之模板-类模板
    c++之函数模板的局限性
    c++之普通函数和模板函数的调用规则
    c++之普通函数和模板函数的区别
    c++之函数模板案例
    c++之模板函数-模板
    c++文件操作之二进制文件-读文件
    c++文件操作之二进制文件-写文件
    FFmpeg获取DirectShow设备数据(摄像头,录屏)
  • 原文地址:https://www.cnblogs.com/Atanisi/p/6821114.html
Copyright © 2011-2022 走看看