IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 算法学习总结:遍历与枚举 -> 正文阅读

[数据结构与算法]算法学习总结:遍历与枚举

本文持续更新
Update date: 2021/10/1

什么是遍历?

遍历(enumerate),顾名思义,找出问题的可能解,然后一个一个地尝试。

什么时候用遍历?

简单而言,任何时候。借用老师的话:

  • It should be your first idea!(拿道题,没思路,就枚举)
  • It could need optimization!(过不了,找问题,再优化)
  • It would be your last solution !(回头看,枚举是最“差”的算法,但是也是解决问题最基本的方法)

典型例题

立方质数

题目
如果一个质数能被表示为三个不同的质数的和的形式,那么我们称它为立方质数。现在给你一个数n,判断它是不是立方质数。

输入数据:正整数n,n<=1000

输出数据:Yes或者No

样例输入

19

样例输出

Yes

思路
新建list,标记从1到n中,所有的质数。复杂度: O ( n 2 ) \mathcal{O(n^2)} O(n2)
新建list时或许用memset函数,把数组置为0;也可以逐个遍历:

# include <cstring> // 必须引入
memset(void *str, int c, size_t n) // 不要用0之外的数字作为c

具体代码如下:

int prime[1001];
memset(prime,0,1001)// 全部置为0
for (int i = 0;i<1001;i++) {
    prime[i]=1;// 全部置为1
}

遍历2到i,是否能整除;如果发现能的,就不是质数

    //int n=1000;
    int n;
    scanf("%d",&n);
    for (int i = 1; i < 1001; ++i) {
        for (int j = 2; j < i; ++j) {
            if (i % j == 0){
                prime[i] = 0; // not prime
                break;}
        }
    }

把找到的one-hot,整理为numeric:

    list<int> a;
    for (int i=1;i<=n;i++){
        if (prime[i]){
            a.push_back(i);
        }
    }

    a.erase(a.begin()); // 1不是质数,用erase(loc)去除

三层循环筛选立方质数

    for(auto num1: a){
        for(auto num2:a){
            for (auto num3:a) {
                //printf("%d %d %d %d\n",n,num1,num2,num3);
                if ((num1+num2+num3 == n) && (num1!=num2) && (num2!= num3) && (num1 !=num3) && (prime[n]==1)){
                        printf("Yes");
                        return 0;
                }
            }
        }
    }
    printf("No");
    return 0;
}

总结
纯遍历的题目不难,重要的是细心、读懂题干。不要漏掉任何一个细节!!!

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-02 15:06:48  更:2021-10-02 15:07:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 12:33:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码