初级算法-排序和搜索

文章目录

        • 合并两个有序数组
          • 题意:
          • 解:
          • 代码:
        • 第一个错误的版本
          • 题意:
          • 解:
          • 代码:

合并两个有序数组

题意:

如题

解:

第一眼看你就能想到归并,不过由于最终要合并到nums1数组,所以如果想用原地算法就要从后往前归并,才不会破坏有序性

代码:
#include
using namespace std;
void merge(vector& nums1, int m, vector& nums2, int n)//库函数 
{
    for(int i=m;i& nums1, int m, vector& nums2, int n)//从后往前归并 
{
    int l1=m-1,l2=n-1,mao=n+m-1;
    while(l1>=0&&l2>=0)
    {
        if(nums1[l1]>nums2[l2]) nums1[mao--]=nums1[l1--];
        else nums1[mao--]=nums2[l2--];
    }
    while(l1>=0) nums1[mao--]=nums1[l1--];
    while(l2>=0) nums1[mao--]=nums2[l2--];
    return ;
}*/
int main()
{
    vector nums1,nums2;
    int n,m,temp;cin>>n>>m;
    for(int i=0;i>temp;
        nums1.push_back(temp);
    }
    for(int i=0;i>temp;
        nums2.push_back(temp);
    }
    nums1.resize(n+m);
    merge(nums1,n,nums2,m);
    for(const auto& num1:nums1) cout<

第一个错误的版本

题意:

一个bool数组,从bad以后(包括bad)都是true,前面都是false,下标从1开始,求bad是多少

解:

二分板子,一个溢出风险

代码:
#include
using namespace std;
int bad;
bool isBadVersion(int version)
{
    if(version>=bad) return true;
    return false;
} 
int firstBadVersion(int n)
{
    int l=1,r=n;
    while(l>1;溢出 
        int mid=l+((r-l)>>1); 
        if(isBadVersion(mid))//true 错误版本
        {
            r=mid;
        }
        else l=mid+1;
    }
    return l;
}
int main()
{
    int n;cin>>n>>bad;
    int ans=firstBadVersion(n);
    cout<

你可能感兴趣的:(力扣每日一题,算法,leetcode)