数组和字符串-数组

文章目录

        • 寻找数组的中心索引
          • 题意:
          • 解:
          • 代码:
        • 搜索插入位置
          • 题意:
          • 解:
          • 代码:
        • 合并区间
          • 题意:
          • 解:
          • 代码:

寻找数组的中心索引

题意:

给定一个数组,找一个最小下标,它左边的数字和等于右边的数字和

解:

先计算总和,然后遍历

代码:
#include
using namespace std;
int pivotIndex(vector& nums)
{
    int lg=nums.size(),left=0,sum=accumulate(nums.begin(),nums.end(),0);
    for(int i=0;i nums;int num;
    while(cin>>num) nums.push_back(num);
    int ans=pivotIndex(nums);
    cout<

搜索插入位置

题意:

给定一个有序数组和一个整数,判断这个整数应该在插入到数组的哪个下标(如已存在数组内,则给出下标)

解:

要求时间复杂度为 O(log n) 的算法,二分lower_bound

代码:
#include
using namespace std;
int searchInsert(vector& nums, int target)
{
    int lg=nums.size();if(target>nums[lg-1]) return lg;
    int l=0,r=lg-1;
    while(l>1);
        if(nums[mid]==target) return mid;
        else if(nums[mid]>target) r=mid;
        else l=mid+1;
    }
    return l;
}
int main()
{
    vector nums;int num;
    int target;cin>>target;
    while(cin>>num) nums.push_back(num);
    int ans=searchInsert(nums,target);
    cout<

合并区间

题意:

数组里存储N个区间,求他们合并完的结果,区间为闭合区间

解:

先排序,然后简单合并

代码:
#include
using namespace std;
bool cmp(const vector& lhs,const vector& rhs)
{
    return lhs[0]> merge(vector>& intervals)
{
    vector> ret;
    sort(intervals.begin(),intervals.end(),cmp);
    int l=-1,r=-1;
    for(auto &row:intervals)
    {
        if(r==-1)//初始化
        {
            l=row[0],r=row[1];
        }
        else
        {
            if(row[0]<=r) r=max(r,row[1]);
            else
            {
                ret.push_back({l,r});
                l=row[0],r=row[1];
            }
        }
    }
    if(r!=-1) ret.push_back({l,r});
    return ret;
}
int main()
{
    vector> intervals;int t1,t2;
    while(cin>>t1>>t2) intervals.push_back({t1,t2});
    vector> ans=merge(intervals);
    for(auto &row:ans)
    {
        for(auto &col:row) cout<

你可能感兴趣的:(力扣每日一题,算法,数据结构,c++,leetcode)