打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Leetcode 4.24

1、面试题50

//map 与unordered_map有什么区别??后者不需要排序吗?class Solution{public:	char firstUniqChar(string s)	{		unordered_map<char, int> map;		if (s == " ")return ' ';		int len = s.size();		for (int i = 0; i < len; i  )		{			//默认值为0			map[s[i]]  ;		}		for (int i = 0; i < len; i  )		{			if (map[s[i]] == 1)return s[i];		}		return ' ';	}};

2、归并排序的学习

#include<iostream>using namespace std; void Merge(int *a,int p, int q, int r){    int n1 = q - p   1;       //左部分的的元素个数    int n2 = r - q;           //同上    int i, j, k;    int *L = new int[n1 1];    int *R = new int[n2 1];    for(i=0;i<n1;i  )        L[i]=a[p i];    for(j=0;j<n2;j  )        R[j]=a[q j 1];    L[n1]=11111111;    R[n2]=11111111;     // 数组L从0~n1-1存放,第n1个存放int型所能表示的最大数,即认为正无穷,这是为了     //处理合并时,比如当数组L中的n1个元素已经全部按顺序存进数组a中,只剩下数组R的     //部分元素,这时因为R中剩下的元素全部小于11111111,则执行else语句,直接将剩下的     //元素拷贝进a中。    for(i=0,j=0,k=p;k<=r;k  )    {        if(L[i]<=R[j])            a[k]=L[i  ];        else            a[k]=R[j  ];    }     delete []L;    delete []R;} void MergeSort(int *a, int l, int r){    if(l<r)    {        int m = (l r)/2;        MergeSort(a,l,m);        MergeSort(a,m 1,r);        Merge(a,l,m,r);    }} //附上主函数int main(){    int i;    int a[11]={2,5,8,8,66,33,2,12,0,56,20};    for(i=0;i<11;i  )        cout<<a[i]<<" ";    cout<<endl;    MergeSort(a,0,10);    for(i=0;i<11;i  )        cout<<a[i]<<" ";    cout<<endl;    return 0;}

3、利用归并排序解决面试题51

class Solution {public:    int MergeSort(vector<int>& nums, int l, int r)    {        if (l >= r)return 0;        int m = (l   r) / 2;        int cont = MergeSort(nums, l, m)   MergeSort(nums, m   1, r);        int n1 = m - l   1;        int n2 = r - m;        int i, j, k;        int* L = new int[n1   1];        int* R = new int[n2   1];        for (i = 0; i < n1; i  )        {            L[i] = nums[l   i];        }        for (j = 0; j < n2; j  )        {            R[j] = nums[m   j   1];        }        L[n1] = INT_MAX;        R[n2] = INT_MAX;        for (i = 0, j = 0, k = l; k <= r; k  )        {            if ((L[i] <= R[j])&&i<n1)            {                nums[k] = L[i  ];                cont  = j;            }            else            {                nums[k] = R[j  ];                            }        }        delete[]L;        delete[]R;        return cont;    }    int reversePairs(vector<int>& nums) {        int len = nums.size();        return MergeSort(nums, 0, len - 1);    }};
来源:https://www.icode9.com/content-4-682601.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
八种排序算法总结(7)
搜狗笔试题--2012
21.03.09 LeetCode15. 三数之和
Go 数据结构和算法篇(七):归并排序
Leetcode刷题之两数之和(1)
新鲜出炉,NOIP 2017全国青少年信息学奥林匹克联赛提高组初赛试题答案
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服