C/C++每日一练(20230407) 选择排序法、多数元素、字母异位词分组

简介: C/C++每日一练(20230407) 选择排序法、多数元素、字母异位词分组

1. 选择排序法

使用选择排序法对10个整数进行由大到小排序。

出处:

https://edu.csdn.net/practice/24915024

代码:

原题代码四个选项都错了,改正如下:

#include <stdio.h>
int main() {
  int a[10];
  int i,j,temp=0;
  int k,x=0;
  printf("输入10个数:\n");
  for(i=0; i<10; i++)
    scanf("%d",&a[i]);
  for(i=0; i<9;i++) {
    k = i;
    for(j=i+1; j<10; j++)
      if(a[i]<a[j]){
        k = j;
        temp=a[i];
        a[i]=a[k];
        a[k]=temp;
      }
  }
  printf("排序后:\n");
  for(i=0; i<10; i++)
    printf("%d ",a[i]);
  getchar();
  return 0;
}

输出:


2. 多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

输入:[3,2,3]

输出:3

示例 2:

输入:[2,2,1,1,1,2,2]

输出:2


进阶:

  • 尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。

出处:

https://edu.csdn.net/practice/24915025

代码:

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    int majorityElement(vector<int> &nums)
    {
        unordered_map<int, int> counts;
        int majority = 0, cnt = 0;
        for (int num : nums)
        {
            ++counts[num];
            if (counts[num] > cnt)
            {
                majority = num;
                cnt = counts[num];
            }
        }
        return majority;
    }
};
int main()
{
  Solution s;
  vector<int> nums = {3,2,3};
  cout << s.majorityElement(nums) << endl;
  nums = {2,2,1,1,1,2,2};
  cout << s.majorityElement(nums) << endl;
  return 0;
} 

输出:

3

2


3. 字母异位词分组

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

输入:["eat", "tea", "tan", "ate", "nat", "bat"]

输出:[["ate","eat","tea"],["nat","tan"],["bat"]]

说明:

  • 所有输入均为小写字母。
  • 不考虑答案输出的顺序。

以下程序实现了这一功能,请你填补空白处内容:

```c++
#include 
using namespace std;
class Solution
{
public:
    vector> groupAnagrams(vector &strs)
    {
        vector> res;
        unordered_map> ht;
        for (const auto &str : strs)
        {
            int counts[26] = {0};
            for (char c : str)
            {
                counts[c - 'a']++;
            }
            string key;
            for (int i : counts)
            {
                ________________;
            }
            ht[key].push_back(str);
        }
        for (const auto &t : ht)
        {
            res.push_back(t.second);
        }
        return res;
    }
};
```

出处:

https://edu.csdn.net/practice/24915026

代码:

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    vector<vector<string>> groupAnagrams(vector<string> &strs)
    {
        vector<vector<string>> res;
        unordered_map<string, vector<string>> ht;
        for (const auto &str : strs)
        {
            int counts[26] = {0};
            for (char c : str)
            {
                counts[c - 'a']++;
            }
            string key;
            for (int i : counts)
            {
        key.push_back('#');
        key.push_back(i + '0');
            }
            ht[key].push_back(str);
        }
        for (const auto &t : ht)
        {
            res.push_back(t.second);
        }
        return res;
    }
};
string vectorToString(vector<string> vect) {
    stringstream ss;
  ss << "[";
    for (int i = 0; i < vect.size(); i++)
  {
        ss << vect[i];
        if (i < vect.size() - 1)
          ss << ",";
    }
    ss << "]";
    return ss.str();
}
int main()
{
  Solution s;
  vector<string> str = {"eat", "tea", "tan", "ate", "nat", "bat"};
  vector<vector<string>> res = s.groupAnagrams(str);
  cout << "[";
  for (int i = 0; i < res.size(); i++)
  {
    cout << vectorToString(res[i]);
        if (i < res.size() - 1)
          cout << ",";
  }
  cout << "]";
  return 0;
} 

输出:

[[bat],[tan,nat],[eat,tea,ate]]


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力!

🌟 收藏,你的青睐是我努力的方向!

评论,你的意见是我进步的财富!  

主页:https://hannyang.blog.csdn.net/


目录
相关文章
|
2月前
|
C++
两种解法解决 LeetCode 27. 移除元素【C++】
两种解法解决 LeetCode 27. 移除元素【C++】
|
2月前
|
存储 安全 编译器
【C++ 关键字 类型限定符 】揭秘C++编程中的神秘元素:深入了解volatile关键字的强大作用
【C++ 关键字 类型限定符 】揭秘C++编程中的神秘元素:深入了解volatile关键字的强大作用
23 0
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
1月前
|
算法 测试技术 Serverless
【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
|
2月前
|
JSON JavaScript 数据格式
【深入探究C++ JSON库】解析JSON元素的层级管理与遍历手段
【深入探究C++ JSON库】解析JSON元素的层级管理与遍历手段
131 2
|
2月前
|
搜索推荐 C++
C++选择排序的实现
C++选择排序的实现
|
2月前
|
程序员 C++ 索引
c++数组元素与讲解
c++数组元素与讲解
19 0
|
4月前
|
Linux 监控 Shell
Linux 终端命令之文件浏览(4) head, tail
Linux 终端命令之文件浏览(4) head, tail
30 0
Linux 终端命令之文件浏览(4) head, tail
|
4月前
|
Shell Linux 机器学习/深度学习
Linux 终端操作命令(3)内部命令用法
Linux 终端操作命令(3)内部命令用法
49 0
Linux 终端操作命令(3)内部命令用法
|
4月前
|
Linux 监控 Ubuntu
Linux 终端操作命令(1)
Linux 终端操作命令(1)
66 1
Linux 终端操作命令(1)