欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Chapter 1 | Arrays and Strings

程序员文章站 2024-02-29 18:32:28
...

1.三数求和。

排序。
外层遍历所有的数,若当前是i,
内层双指针,一头一尾使得和为 -a[i],大了左移右侧指针,小了右移左侧。
复杂度:O(n^2)

2.bitset

(1)桶排的空间优化
数组压缩为32位int型的一个数字 。

(2)判断一个字符串中的字符是否唯一(即没有重复)
注意询问范围,如果只是ascii码,共256个。(后128个是键盘不可显示字符)
压缩

        int idx = v/32, shift=v%32;
        if(a[idx] & (1 << shift)) return false;//判断这位上代表的字符是否出现过
        a[idx] |= (1 << shift);

3.ctyle

字符串末尾包括'\0'

4.写一个函数判断两个字符串是否是变位词。

仍然询问一下范围,ascii码直接开数组。其它什么都有用map
unordered_map是个很棒的stl,只要你不需要排序,查找的时间复杂度只有O(1)

/*
写一个函数判断两个字符串是否是变位词。
变位词(anagrams)指的是组成两个单词的字符相同,但位置不同的单词。比如说, abbcd和abcdb就是一对变位词。
*/
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
string a,b;
unordered_map<char ,int> mp;
bool init(){
    cin>>a;
    for(auto i:a){
        mp[i]++;
    }
    cin>>b;
    for(auto i:b){
        if(mp[i] == 0)  return 0;
        mp[i]--;
    }
    for(auto i:mp){
        if(i.second)    return 0;
    }
    return 1;
}
int main(){
    bool ans = init();
    cout << ans<< endl;
}

原地进行矩阵旋转。

分两步。 第一步交换主对角线两侧的对称元素,第二步交换第i行和第n-1-i行。
逆时针:右上左下的swap,顺时针:左上右下。

转载于:https://www.jianshu.com/p/40a99561b901