Acwing
何智鹏
不想编程的程序员
展开
-
数论
1、质数定义:在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数(素数)。小于等于1的数既不是质数,也不是合数。质数的判定----试除法\sqrt{n}bool is_prime(int u) { if (u < 2) return false; for (int i = 2; i <= u / i; i ++ ) { if (u % i == 0) return false; } return tr原创 2021-05-13 07:47:03 · 100 阅读 · 0 评论 -
欧几里得算法
int gcd(int a, int b){ return b ? gcd(b, a % b) : a;}原创 2021-05-08 09:37:31 · 85 阅读 · 0 评论 -
最短路算法
一、朴素版Dijkstraint n, m; //n:点的个数 m:边的条数int g[N][N]; //存储每条边 int dist[N]; //存储1号点到每个点的最短距离bool st[N]; //存储每个点的最短路是否已经确定// 求1号点到n号点的最短路,如果不存在则返回-1int dijkstra(){ memset(dist, 0x3f, sizeof dist); dist[1] = 0; for(int i = 0; i &原创 2021-05-05 15:04:37 · 92 阅读 · 0 评论 -
二分查找算法模板
算法思路:假设目标在闭区间**[l , r]中, 每次将区间长度缩小一半,当l = r**时,我们就找到了目标 .版本1当我们将区间怕**[l , r]划分成[l, mid]和[mid + 1 , r]时,其更新操作是r = mid** 或者 l = mid + 1; , 计算mid时不需要加1 .int bsearch_1(int l, int r){ while(l < r){ int mid = l + r >> 1; if(check(mid)) r = m原创 2021-04-02 23:08:21 · 87 阅读 · 0 评论 -
基于快排的快速选择算法
题目描述给定一个长度为 n 的整数数列,以及一个整数 k,请用快速选择算法求出数列从小到大排序后的第 k 个数。时间复杂度O(n)思路:要找到的第k个数如果比快排分出来左边个数小,就递归左边; 如果第k个数比分出来左边个数大,就递归右边完整代码#include<iostream>using namespace std;const int N = 1e6 + 10;int q[N];int n, k;int quick_sort(int l, int r, int原创 2021-03-20 15:29:28 · 416 阅读 · 0 评论 -
超简洁10行代码实现快速排序
话不多说,直接贴代码以前写过一个快速排序的代码,(点击此处查看),是模仿算法第四版的作者写的,这次更加的简洁,算是进阶版吧, 感谢y总.说明一下, 这里x =q[l + r >> 1]就是x = q[(l + r) / 2], 取中位数. 当然也可以写x = q[l]和x = q[r].完整代码#include<iostream>using namespace std;const int N = 1e6 + 10;int n;int q[N];void qu原创 2021-03-20 14:50:18 · 347 阅读 · 3 评论 -
Acwing-递归实现指数型枚举
题目描述:从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。输入样例:3输出样例:322 311 31 21 2 3思考过程:涉及到递归,脑中要有一颗递归搜索树,叶结点即使结果参数确定:1.当前考虑第几个数2.前面的数有没有选bool st[]完整代码:#include<iostream>#include<algorithm>using namespace std; const int N = 20;bool原创 2021-03-19 22:06:42 · 78 阅读 · 0 评论 -
LeetCode-反转链表Ⅱ
题目描述:给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。实例输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]思考示意图完整代码/** * Definition for singly-linked list. * struct ListNode { * int val;原创 2021-03-18 23:23:26 · 114 阅读 · 0 评论 -
Acwing-反转链表Ⅰ(迭代+递归两种方法, 代码简洁)
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。样例输入:1->2->3->4->5->NULL输出:5->4->3->2->1->NULL算法1 迭代翻转即将所有节点的next指针指向前驱节点。由于是单链表,我们在迭代时不能直接找到前驱节点,所以我们需要一个额外的指针保存前驱节点。同时在改变当前节点的next指针前,不要忘记保存它的后继节点。代码实现/** * Definition for singl原创 2021-03-18 21:22:20 · 119 阅读 · 0 评论