算法题
hgxy123
这个作者很懒,什么都没留下…
展开
-
两个栈模拟实现一个队列
栈的特点是后进先出,队列的特点是先进先出,所以我们用两个栈来实现,我们需要分别实现进队列和出队列,stack1进栈,然后出队列,将stack1栈顶的元素全部进入stack2,然后stack出栈,就实现了先进先出。#include<iostream>#include<stack>using namespace std;template<typ...原创 2020-02-10 23:50:03 · 322 阅读 · 0 评论 -
打印链表倒数第k个节点
这个题目的方法是用两个指针,快指针先向前走了k步,慢指针指在了第一个位置,然后他们同时向前走,当快指针走到了end的位置,慢指针的位置就是倒数第k个节点。//链表中倒数第k个节点#include<iostream>#include<list>using namespace std;int the_k_back_node(list<int> l...原创 2020-02-09 18:52:50 · 242 阅读 · 0 评论 -
打印1到最大的n位数
代码如下,我们在这里采用大数的运算,即用字符串模拟实现,如果是n位数,那么我们设置一个n+1位的字符串,最后一位为‘0’,首先将内部每一位都置为0,然后计算,如果我们得出最后一位++小于等于9,则结束这次循环,如果else,则把这个位数是第一位,需要进位,那么结束全部,已经到了最大的n位数了,否则,前一位加1,takeover表示进位,然后我们原本的那位就是减去10,注明,加减‘0’表示的是由整型...原创 2020-02-09 18:44:57 · 412 阅读 · 0 评论 -
让数组中奇数位于偶数前面
//双指针法,分别从后往前和从前往后查找,找到奇数和偶数,交换它们,然后最后将排好的数组打印出来。#include<iostream>using namespace std;void rearray(int* array, int length){ if (array == nullptr || length == 0) return;...原创 2020-02-06 19:49:15 · 145 阅读 · 0 评论 -
数字的数值次方
#include<iostream>using namespace std;bool g_invalid = false;bool equal_zero(double base){ g_invalid = false; if (base <0.000001 && base >-0.000001) return tr...原创 2020-02-05 21:26:27 · 285 阅读 · 0 评论 -
二进制中1的个数
//二进制中1的个数#include<iostream>using namespace std;int count_1(int n){ int count = 0; int shift = 1; for (int i = 0; i < 32; i++) { if (n&shift) coun...原创 2020-02-05 21:23:19 · 99 阅读 · 0 评论 -
数组中重复的数字
//数组中重复的数字#include<algorithm>#include<map>#include<iostream>using namespace std;//数组中重复的数字 改变数组,时间复杂度o(nlogn),空间o(1)void find(int *arr){ sort(arr,arr+7); for (int i ...原创 2020-02-05 21:20:28 · 117 阅读 · 0 评论 -
二维数组中的查找
#include<vector>#include<iostream>using namespace std;//二维数组中的查找bool number(int t, vector<vector<int>> c){ int col = c.size(); int rew = c[0].size(); int col...原创 2020-02-05 21:18:12 · 213 阅读 · 0 评论 -
剑指offer数组中重复的数字
在一个长度为n的数组里的所有数字都在0到n-1的范围内,数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次,请找出数组中任意一个重复的数字,例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2首先提供一种解决思路,现在已有的条件是如上,那么我们既然知道数字分别是0-n-1,那么我们可以用一个数组存下来这些数字,然后从下标为0开...原创 2019-08-01 12:04:37 · 121 阅读 · 0 评论 -
只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4题目就是上面这样,我们脑子里可能一开始会想到排好序,然后依次去比较,但是有一个很简单的方法,就是用位运算,题目告诉...原创 2019-08-05 15:03:52 · 115 阅读 · 0 评论 -
剑指offer 重建二叉树
重建二叉树,有一个前提,就是知道前序和中序遍历,或者中序和后序遍历。题目如下:输入某二叉树的前序和中序遍历,重建该二叉树。然后解题思路如下,如果我们有一个二叉树的前序和中序,那么前序遍历就是根节点-->左节点-->右节点,通过前序,我们可以找到根节点,然后在中序中寻找根节点,由于中序遍历是左节点-->根节点-->右节点,那么根节点前的都是左节点,之后的都是右节点,然...原创 2019-07-25 23:02:01 · 121 阅读 · 0 评论 -
leetcode 692 前k个高频单词
class Solution {public: vector<string> topKFrequent(vector<string>& words, int k) { //1.[] 2.find insert 3.insert map<string,int> countmap; //将字符串按...原创 2019-07-30 15:23:12 · 278 阅读 · 1 评论 -
一个数组有 N 个元素,求连续子数组的最大和(动态规划问题)
该题题目如上,例如【-1,2,1】连续的最大子数组为【2,1】,和为3;题目要求我们输入第一个数为数组元素的个数,然后后面为我们需要输入的元素。遇到这一个题,我们首先可以这样考虑,设置一个sum和result,sum是用来每次加新的元素,result是最后得出最大的子数组和。我们可以每次给sum中添加新的元素,从第一个开始向后,如果遇到和比result大的时候,就把sum的值赋给res...原创 2019-07-29 20:26:30 · 3217 阅读 · 0 评论 -
求1+2+3+.....n 要求不能使用乘除法,以及for while if else 以及各种条件判断语句
这道题有一个非常简单的解法,就是使用逻辑与。直接上代码:class Solution {public: int Sum_Solution(int n) { int ret =n; ret && (ret += Sum_Solution(--n)); return ret; }};就是这么简单的一种解法,通...原创 2019-07-29 15:55:00 · 163 阅读 · 0 评论