每天一刷20200701

    技术2022-07-11  156

    今天7.1号也要加油哦 问题 题目描述 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。 注意每个输入文件有多组输入,即多个字符串用回车隔开 输入描述:

    字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。

    输出描述:

    删除字符串中出现次数最少的字符后的字符串。 思路 考察数据结构中,mp的使用。或者直接用一个大小为26的数组来统计字符出现的次数也是可以的 代码

    #include<iostream> #include<map> #include<limits.h> using namespace std; int main(){ string str; while(cin >>str){ map<char, int> mp; int small = INT_MAX; for(int i = 0; i<str.length();++i){ ++mp[str[i]]; small =min(small,mp[str[i]]); } for(auto it:str){//这里是遍历源字符串,并进行判断才能输出对的值 if (mp[it] == small) continue; cout<<it; } cout<<endl; } return 0; }

    问题 又是一个玄学的二分,哭了 实现 pow(x, n) ,即计算 x 的 n 次幂函数。

    示例 1:

    输入: 2.00000, 10 输出: 1024.00000

    示例 2:

    输入: 2.10000, 3 输出: 9.26100

    示例 3:

    输入: 2.00000, -2 输出: 0.25000 解释: 2-2 = 1/22 = 1/4 = 0.25

    说明:

    -100.0 < x < 100.0 n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/powx-n 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 思路 分治法 代码

    class Solution { public: double quickMul(double x, long long N) { if (N == 0) { return 1.0; } double y = quickMul(x, N / 2); return N % 2 == 0 ? y * y : y * y * x; } double myPow(double x, int n) { long long N = n; return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N); } };

    迭代:

    class Solution { public: double quickMul(double x, long long N) { double ans = 1.0; // 贡献的初始值为 x double x_contribute = x; // 在对 N 进行二进制拆分的同时计算答案 while (N > 0) { if (N % 2 == 1) { // 如果 N 二进制表示的最低位为 1,那么需要计入贡献 ans *= x_contribute; } // 将贡献不断地平方 x_contribute *= x_contribute; // 舍弃 N 二进制表示的最低位,这样我们每次只要判断最低位即可 N /= 2; } return ans; } double myPow(double x, int n) { long long N = n; return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N); } };
    Processed: 0.009, SQL: 9