
新的征程
LBJHan
经历过就是财富
展开
-
BJTU Tower of Hanoi 变种汉诺塔——每个型号盘子不止一个,每个型号盘子也要按序排放
Tower of Hanoi成绩: 5 / 折扣: 0.8题面描述变种汉诺塔问题和普通汉诺塔问题略有不同,规则描述如下:有三根柱子,在最左侧柱子上放置着若干圆盘。与传统汉诺塔不同的是,其中存在部分大小相同的圆盘。要求包括初始状态在内,每个圆盘上方放置的圆盘不得大于该圆盘,即圆盘上方只能放置小于自己或和自己相同大小的圆盘。每次移动只能将某柱子最顶部的一个圆盘移动到另一柱子的最顶部。需要注意的是,大小相同的圆盘具有的其他特征是不一样的,例如不同颜色。最后需要保证 2 号柱子上原创 2020-07-18 19:55:53 · 508 阅读 · 0 评论 -
滑动窗口的最大值&队列的最大值——单调栈/单调队列的应用
I. 滑动窗口的最大值给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]维护一个单调递减队列,维护区间为k;class Solution {public: vector<int> maxSlidingWindow(vect...原创 2020-02-20 07:34:39 · 489 阅读 · 0 评论 -
数组中数字出现的次数(位运算的运用)
背景知识:若x是任意整数, 则有:x^x=0;x^0=x;三道题:一个数组,其中只有一个数只出现一次,其他数字均出现两次,求只出现一次的数答:将所有数异或一遍,最终结果即所求一个数组,其中有两个数只出现一次,其他数字均出现两次,求只出现一次的数答:记只出现一次的数分别为a, b;所有数字异或和的值为a^b!=0;记a^b的二进制表示在inx位上为1;数组中在inx...原创 2020-02-19 08:28:35 · 515 阅读 · 0 评论 -
数组中出现次数超过一半的数字( O(n) 时间复杂度)
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2第一个方法排序后取中位数,很简单时间复杂度为O(nlogn);下面看一个O(n)的方法假设数组中出现次数最多的数字是x,则x的出现次数比其他数字出现次数之和还要多;用cnt记录x出现的...原创 2020-02-18 19:01:55 · 398 阅读 · 0 评论 -
包含min函数的栈(借用辅助栈)
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。借用一个辅助栈,用来存放当前最小值记存放所有元素的栈为s, 存放最小值的栈为mx元素入栈时当m为空时,s入栈的同时,m也入栈;当m不为空时,如果m的栈顶元素小于等于x,m入栈,否则m不入栈出栈时s栈顶元素与m栈顶元素相等时,s, m...原创 2020-02-18 14:30:13 · 222 阅读 · 0 评论 -
下一个排列(Leetcode)
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1思路:题目大意就是找该数组的所有排列顺序中,字典序比给定顺序...原创 2020-02-15 08:49:01 · 219 阅读 · 0 评论 -
两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), ne...原创 2020-02-14 16:55:35 · 294 阅读 · 0 评论 -
二维数组中的查找(剑指offer)
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。记数组为a[n][m],要查询的数记为x则若a[i][j]<x ,则x比存在于a[i][j]的右下方则若a[i][j]>x ,则x比存在于a[i][j]的左上方由a[n][0]开始查询,...原创 2020-02-09 22:13:29 · 217 阅读 · 0 评论 -
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。解法一:/*bool flag = x && y;对于上式,若x==0,不会判断y也即对于&&运算符,若左侧为false,那么不会对右侧进行运算*/int solve0(int n){ int sum = n; ...原创 2020-02-07 07:24:50 · 266 阅读 · 0 评论 -
不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。先来计算下面数之和:6 + 5 = 11二进制表示:110 + 101 = 1011列竖式:总结:a、b相加步骤:1. x=a^b, y=(a&b)<<1,其中y表示进位2. 若y==0, 结果为y3. 计算x, y相加,另a=x, b=y,到步骤1#include <bi...原创 2020-02-06 21:34:55 · 169 阅读 · 0 评论 -
数组中只出现一次的数字
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。利用异或解决1^1 = 01^0 = 10^0 = 0x^x = 0设数组中只出现一次的数分别为a, b;记t=0;t与数组中所有数异或结果为result = a^b;又a!=b;则result!=0;设result的二进制表示的第inx位是1,则a和b的二进制表示的inx位上一个为1...原创 2020-02-06 20:53:42 · 213 阅读 · 0 评论 -
杨辉三角
杨辉三角(也称帕斯卡三角)是一个无限对称的数字金字塔,从顶部的单个1开始,下面一行中的每个数字都是上面两个数字的和。杨辉三角,是二项式系数在三角形中的一种几何排列,在中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623—-1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。/**性质:最外层的数...原创 2019-12-27 15:30:30 · 2058 阅读 · 0 评论