CC150(Data Structures)

1.Arrays and Strings

1.1

bool isUniqueChars(string s)
{
    if(s.length()>256)return false;
    vector<bool> vec(256,false);
    for(int i=0;i<s.length();++i)
    {
        if(vec[int(s[i])])return false;
        vec[int(s[i])]=true;
    }
    return true;
}

1.2

void reverse(char *s)
{
    if(!s)return;
    char *t=s;
    while(*t)++t;
    --t;
    while(s<t)
    {
        *s^=*t;
        *t^=*s;
        *s++^=*t--;
    }
}

1.3

bool permutation(string s,string t)
{
    if(s.length()!=t.length())return false;
    vector<int> vec(256,0);
    for(int i=0;i<s.length();++i)++vec[int(s[i])];
    for(int i=0;i<t.length();++i)
    {
        if(--vec[int(t[i])]<0)return false;
    }
    return true;
}

1.4

void  replaceSpaces(char *s,int n)
{
    if(!s||n<=0)return;
    int cnt=0;
    for(int i=0;i<n;++i)
    {
        if(s[i]==' ')++cnt;
    }
    int m=n+cnt*2;
    s[m--]='\0';
    for(int i=n-1;i>=0;--i)
    {
        if(s[i]!=' ')s[m--]=s[i];
        else
        {
            s[m--]='0';
            s[m--]='2';
            s[m--]='%';
        }
    }
}

1.5

string compress(string s)
{
    if(s.length()<=2)return s;
    int i=0,j=0;
    string t;
    while(j<s.length())
    {
        while(j<s.length()&&s[j]==s[i])++j;
        t+=s[i];
        t+='0'+j-i;
        i=j;
    }
    if(t.length()<s.length())return t;
    return s;
}

1.6

void rotate(vector<vector<int> > &matrix)
{
    int n=matrix.size();
    for(int i=0;i<n/2;++i)
    {
        for(int j=i;j<n-1-i;++j)
        {
            int tmp=matrix[i][j];
            matrix[i][j]=matrix[n-1-i-(j-i)][i];
            matrix[n-1-i-(j-i)][i]=matrix[n-1-i][n-1-i-(j-i)];
            matrix[n-1-i][n-1-i-(j-i)]=matrix[i+(j-i)][n-1-i];
            matrix[i+(j-i)][n-1-i]=tmp;
        }
    }
}

1.7

void setZeros(vector<vector<int> > &matrix)
{
    vector<bool> row(matrix.size(),false),col(matrix[0].size(),false);
    for(int i=0;i<matrix.size();++i)
    {
        for(int j=0;j<matrix[0].size();++j)
        {
            if(matrix[i][j]==0)row[i]=col[j]=true;
        }
    }
    for(int i=0;i<matrix.size();++i)
    {
        for(int j=0;j<matrix[0].size();++j)
        {
            if(row[i]||col[j])matrix[i][j]=0;
        }
    }
}

1.8

bool isRotation(string s1,string s2)
{
    if(s1.size()!=s2.size())return false;
    s1+=s1;
    return isSubstring(s1,s2);
}

2.Linked Lists

2.1

node *deleteDups(node *head)
{
    node dummy(-1);
    dummy.next=head;
    node *prev=&dummy,*cur=head;
    unordered_set<int> set;
    while(cur)
    {
        if(set.find(cur->value)==set.end())
        {
            set.insert(cur->value);
            prev=cur;
            cur=cur->next;
        }
        else
        {
            prev->next=cur->next;
            delete cur;
            cur=prev->next;
        }
    }
    return dummy.next;
}

2.2

node *kthToLast(node *head,int k)
{
    node *p=head,*q=head;
    while(q&&--k)q=q->next;
    if(!q)return NULL;
    while(q->next)
    {
        p=p->next;
        q=q->next;
    }
    return p;
}

2.3

bool deleteNode(node *p)
{
    if(!p||!p->next)return false;
    node *tmp=p->next;
    p->value=tmp->value;
    p->next=tmp->next;
    delete tmp;
    return true;
}

2.4

node *partition(node *head,int x)
{
    node dummy1(-1),dummy2(-1);
    node *p=&dummy1,*q=&dummy2;
    for(node *cur=head;cur;cur=cur->next)
    {
        if(cur->value<x)
        {
            p->next=cur;
            p=cur;
        }
        else 
        {
            q->next=cur;
            q=cur;
        }
    }
    p->next=dummy2.next;
    if(q->next)q->next=NULL;
    return dummy1.next;
}

2.5

node *addLists(node *l1,node *l2)
{
    node dummy(-1);
    node *prev=&dummy;
    int carry=0;
    for(;l1||l2;l1=l1?l1->next:NULL,l2=l2?l2->next:NULL,prev=prev->next)
    {
        int ai=l1?l1->value:0,bi=l2?l2->value:0;
        prev->next=new node((ai+bi+carry)%10);
        carry=(ai+bi+carry)/10;
    }
    if(carry)prev->next=new node(carry);
    return dummy.next;
}
Rust数据结构是指在Rust编程语言中可以用于存储和组织数据的不同方式和类型。Rust提供了许多内置的数据结构,同时也可以使用各种第三方库来扩展这些数据结构。 常见的Rust数据结构包括: 1. 向量(Vectors):向量是一个动态长度的数组,可以在其中存储任意类型的数据。向量可以动态增长或缩小,也可以按索引访问元素。 2. 哈希映射(Hash Maps):哈希映射是一种键值对的数据结构,其中每个键都与一个唯一的值相关联。哈希映射的插入和查找操作的时间复杂度通常为O(1),因此在需要快速查找或数据去重的场景中非常有用。 3. 字符串(Strings):Rust中的字符串是一系列Unicode标量值的集合。它们可以通过字面量、转换或动态构建来创建和操作。Rust还提供了许多与字符串相关的方法和操作符。 4. 切片(Slices):切片是对数组或向量的引用,允许您引用整个集合或仅引用集合的一部分。切片非常适用于通过传递指定范围的数据来减少内存占用和提高性能的情况。 此外,还有很多其他数据结构可以在Rust中使用,例如堆栈、队列、链表等。Rust还提供了许多强大的工具和概念,如所有权、借用和生命周期,这些可以帮助开发人员安全地管理数据结构的访问和修改。 通过使用各种数据结构,Rust为开发人员提供了灵活和高效的方式来存储和操作数据,使他们能够更轻松地构建稳健和高性能的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值