摘要:
###一维前缀和 很简单,可以联想等差数列求每一段和的公式 Sij = Sj - Si 一维的前缀和的初始化就是 S[i] = S[i-1] + a[i] 前缀和数组从1开始初始化 所以想要求 x -> y 段和 公式就是 res = S[y] - S[x-1] ####代码 #include<io 阅读全文
摘要:
###高精加 #include<iostream> #include<vector> #include<string> using namespace std; vector<int> add(vector<int> &A, vector<int> &B) { vector<int> C; int 阅读全文
摘要:
ios::sync_with_stdio(false) :用来关闭iostream与stdio的同步,从而提高 cin cout 的效率,但是就不能再用 scanf printf 了,因为不关闭之前是C++为了与C兼容,以免 cout 与 printf 一块使用时造成混乱,才打开同步,这样可以提高一 阅读全文
摘要:
###原题: 给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。 对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。 如果数组中不存在该元素,则返回“-1 -1”。 输入格式 第一行包含整数n和q,表示数组长度和询问个数。 第二行包含n个整数(均在1~10000范围内) 阅读全文
摘要:
算法时间复杂度:妥妥的nlogn 步骤: 1.确定分界点 mid = (l+r) >> 1 2.递归排序左右两边 3.归并——合二为一(用两个指针,分别指向两个序列) 就是递归到最底部,然后对小部分排序,归并为大部分。 代码模板: void merge_sort(int q[], int l, in 阅读全文
摘要:
快速排序大体分为三个步骤: 1.确定分界点 q[(l+r) >> 1] 或者 q[(l+r+1) >> 1] ,两者得看情况而定,不能用 q[l] 或者 q[r] 了 因为会超时。 2.调整区间范围,让小于等于x的放在左边,大于等于x的数放在右边。 3.递归处理左右两端。 模板代码: void qu 阅读全文
摘要:
洛谷上的题:有些·表示一个操作结束~假装没看到 1 #include<iostream> 2 #include<stack> 3 #include<string> 4 #include<cstring> 5 #include<algorithm> 6 using namespace std; 7 8 阅读全文
摘要:
你有一个只支持单个标签页的 浏览器 ,最开始你浏览的网页是 homepage ,你可以访问其他的网站 url ,也可以在浏览历史中后退 steps 步或前进 steps 步。 请你实现 BrowserHistory 类: BrowserHistory(string homepage) ,用 home 阅读全文
摘要:
题目背景 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。 输入格式 第一行 输入n行m列 障碍个数numObs 第二行 阅读全文
摘要:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1]输出: 1 示例 2: 输入: [4,1,2,1,2]输出: 4 思路:运用sort快速 阅读全文