算法精练
文章平均质量分 50
码农印象
修炼的过程中,最好有人和你并肩而行,共同成长!努力做一个文邹邹的工具人,你做得越多,你知道的越多......
展开
-
【算法面试题】交换排序问题
算法面试题】交换排序问题2016年12月19日 17:32:25 _stark 阅读数:298更多所属专栏: 刷题版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bit_clearoff/article/details/53744749面试题原数组pArr为[‘A’,’B’,’C’,’D’,’E’],现在给定新位置pPos[3,0,1,4...原创 2019-11-04 23:20:25 · 317 阅读 · 0 评论 -
【九度OJ】栈中元素排序
题目 一个栈中元素类型为整型,现在想将栈顶到栈底从大到小排序。要求:只能申请一个栈,但可以申请新的变量,不能申请额外的数据结构,如何完成排序。思路将要排序的栈记为s,申请的辅助栈记为t,在栈s上执行pop操作,弹出的元素为cur,每次弹出一个元素时,分两种情况:情况一:如果cur小于或等于t中的栈顶元素,则将cur元素直接压入栈t中。情况二:如果cur大于t中的栈顶元...原创 2018-09-01 12:12:04 · 930 阅读 · 0 评论 -
【剑指offer】调整链表偶数奇数顺序
题目 给定一个单链表,使得链表中偶数位于奇数之前。 Input: 17->15->8->12->10->5->4->1->7->6->NULL Output: 8->12->10->4原创 2018-10-08 16:32:48 · 918 阅读 · 0 评论 -
【剑指offer】二叉树镜像(递归与非递归)
题目 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 如下图所示:右边的二叉树就是左边的树的镜像。我们可以根据照镜子的经验画出它的镜像。 递归:递归思想:这两棵树的根节点相同,但是他们的左右孩子交换了。首先,我们交换根节点的两个孩子,然后递归的处理根节点孩子的孩子。代码如下:void mirror(BinaryTreeNode *ro...原创 2018-08-22 13:20:28 · 1732 阅读 · 0 评论 -
【精练】编写函数int count_number_string(char str[])和函数int maxnum_string(char str[])
题目参考代码#include <stdio.h>#include <string.h>#include <assert.h>#include <ctype.h> #define N 100//数字个数 int count_number_string(char* str){ assert(str); ...原创 2018-09-12 01:06:44 · 1227 阅读 · 0 评论 -
【剑指offer】青蛙跳台阶及变态跳台阶问题
题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)解题思路:首先,我们可以将问题简单化。假如只有1级台阶的话,肯定只有一种跳法;假如有两级台阶的话,就会有两种跳法,一种是一次跳一级,分两次跳,另一种是一次跳两级;那现在假设有n级台阶的话,我们可以把跳法看成是台阶数n的函数F(n),首先第一次跳就有两种跳...原创 2018-09-03 23:56:22 · 982 阅读 · 0 评论 -
【算法精练】河内之塔
河内之塔简介河内之塔(TowersofHanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时 北越的首都,即现在的胡志明市;1883年法国数学家 EdouardLucas曾提及这个故事,据说创世 纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64 个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第...原创 2018-10-20 23:23:20 · 245 阅读 · 0 评论 -
【算法精练】快速洗扑克牌(乱数排序)
洗扑克牌要求:假设除过大小王,对剩余的52张牌进行洗牌。扑克牌有两条属性:①花色 ②大小。请使用C/C++模拟实现洗牌程序。算法设计:52张牌中,其中按花色可以分为:①红桃♥ ②黑桃♠ ③麻花♣ ④方片♦ 。这样可以将52张牌平分成4类,每一类13张牌代表同一种花色即可。按大小来分可以分为两类:①1~10 ② JQK 两种类型。通过mod运算,即可将JQK3个特殊情况分开处理。源代码及注释:...原创 2018-10-23 17:30:43 · 2118 阅读 · 0 评论 -
【算法精练】高次方数的尾数/阶乘尾数零的个数
高次方数的尾数**要求:**求133的133次方的最后三位数。利用C/C++程序进行设计。算法设计:由于计算机所能表示的整数范围有限,直接乘的方法显然是不可能得到正确的结果。但事实上,题目只要求保留后三位,完全没有必要求出完整结果。因此:通过研究乘法的规律可以发现,乘积的后三位的值只与乘数与被乘数的后三位有关,与他们的高位无关。利用这一规律,可以大大简化程序。源代码及注释:#include...原创 2018-10-23 17:32:51 · 824 阅读 · 0 评论 -
【算法精练】歌星大奖赛及扩展
歌星大奖赛要求:在歌星大奖赛中,有10个评委为参赛选手打分,分数为1到100分。选手最后得分为:去掉一个最高分,去掉一个最低分,最终得分为8个分数的平均分。请编写C/C++程序实现。算法设计:这个问题的算法十分简单,但要注意在程序中判断最大、最小值的变量是如何赋初值的。源代码及注释:#include &lt;stdio.h&gt;#include &lt;Windows.h&gt;in...原创 2018-10-28 11:26:35 · 1440 阅读 · 0 评论 -
【数据结构】轻松get单链表面试题
前言删除无头单链表的非尾节点(不能遍历单链表)在无头单链表非头节点前插入值为data的节点用单链表实现约瑟夫环逆置单链表(利用三个指针进行逆置)逆置单链表(头插法)对单链表进行冒泡排序(升序)查找单链表的中间节点(只能遍历一次链表)查找单链表的倒数第K个节点(只能遍历一次链表)删除单链表倒数第K个节点合并两个有序单链表,合并之后依然有序求单链表中结点的个数判断一个单链表中是否有环判断两个单链表是否...原创 2018-10-24 19:10:56 · 351 阅读 · 0 评论 -
【算法精练】位运算 && 阶乘
位运算最近碰到很多通过巧妙着`来巧妙解决复杂问题的算法,今天分享的这道题,或许能够开拓你的一些算法思维。案例一有一组存放 ID 的数据。并且 ID 取值为 0 - (N-1) 之间,其中只有一个 ID 出现的次数为 1,其他的 ID 出现的次数都等于 2,问如何找到这个次数为 1 的 ID ?解法一:巧用数组下标我的第一想法便是采用下标法来解决,把 ID 作为数组 arr 的下标,在...原创 2019-03-22 18:43:15 · 825 阅读 · 0 评论 -
【算法精练】非循环求解1+2+…+n问题
题目求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。这道题出自剑指offer的面试题,是一道不错的能够考察应聘者发散思维能力的题目,对于快要毕业的我们,的确是一个挑战。之前我们求解这样的问题无非就是·套用公式,或者循环,递归求解,既然限制了这些方法的实现,那是否还有更为巧妙的方法呢?下面为大家列举出四种方法。...原创 2019-04-03 21:14:06 · 552 阅读 · 0 评论 -
【算法精练】Top K问题
topK问题是一个经典的海量数据处理问题,比如热搜上每天都会更新出排行前10的热门搜索信息,再或者通过大数据找出陕西省人最爱吃的水果等,都可以使用topK问题来解决,其核心思想就是最小堆的引入。topK问题分析在海量数据中找出出现频率最高的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题。下面我们通过一个简单的示例来说明:假如面试官给你100W个数据,请找出其中...原创 2019-10-08 20:55:08 · 219 阅读 · 0 评论 -
【剑指offer】单链表实现约瑟夫环
导读: 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。这里,我将是以一个单链表围成一个环,然后从第一个结点开始报数,...原创 2018-08-23 21:05:55 · 583 阅读 · 0 评论 -
【LeetCode】add Two Numbers(两单链表对应数值之和)
题目 You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as...原创 2018-09-27 14:24:31 · 443 阅读 · 0 评论 -
【LeetCode】median of two sorted arrays(两个有序数组的中值)
题目 There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)). 有两个排序的数组A和B分别是m和n。找到两个排序数...原创 2018-08-21 13:08:14 · 2049 阅读 · 1 评论 -
【剑指offer】扑克牌的顺子
题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…..LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K...原创 2018-06-12 15:17:53 · 769 阅读 · 0 评论 -
【剑指offer】不用加减乘除求两个数的和
题目: 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。输入: 输入可能包含多个测试样例。 对于每个测试案例,输入为两个整数m和n(1&lt;=m,n&lt;=1000000)。输出: 对应每个测试案例,输出m+n的值。样例输入: 3 4 7 9样例输出: 7 1...原创 2018-06-04 23:48:08 · 1243 阅读 · 0 评论 -
【剑指offer】实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA
【题目描述】:1.实现一个函数,可以左旋字符串中的k个字符。AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAA【算法描述】:方法一:【暴力移位法】算法思想:用移的步数作为while循环条件(每移1位完了减1),1位1位的移动,即只需要一个空的变量来存移出去的字符,而这时变量i已经到了数组最后的空位置,此时把先前移出去的字符再补回来即可#def...原创 2018-05-06 13:40:46 · 952 阅读 · 0 评论 -
【剑指offer】找出数组中只出现一次的2个数,其他数都是成对出现(出现一次的三个数)
致读者:本篇文章介绍如何找出一个数组中非成对的一个数字,后边还拓展到求两个非成对的数字和三个非成对的数字中的任意一个。这几个题目主要考察的是我们对异或操作符的掌握程度。: 题目一、查找数组中一个非成对的数字假设找出数组arr[]={1,1,2,2,3,3,4}中不成对出现的数字,既4. 异或的性质:a^a=0;b^0=b. 将数组中的所以值安位异或起来就可以找到唯一一个不成对...原创 2018-05-15 16:36:23 · 1696 阅读 · 0 评论 -
【LeetCode】单链表逆序从头到尾隔断插入
题目: Given a singly linked list L: L 0→L 1→…→L n-1→L n, reorder it to: L 0→L n →L 1→L n-1→L 2→L n-2→… You must do this in-place without altering the nodes’ values. For example, Give...原创 2018-08-18 01:36:00 · 839 阅读 · 0 评论 -
【LeetCode】复杂链表的复制
题目: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路: 对于复杂链表,一般形式会在next域的基础上增加一个random域,这个指针会指向任意的结点,当然,其也可以指向空指针域,其一般结点的构造形式为...原创 2018-08-18 02:15:58 · 2091 阅读 · 1 评论 -
【剑指offer】判断一个数(字符串)是否回文
题目 判断一个数(或字符串)是否是回文数(回文字符串) 回文数: 回文数也是一个数字,数字的特点是正反序是同一个数字。 比如:12321 、 3443、abcdcba 就是回文数思路 方法一: 将数值(字符串)的各个位存放在数组中,若数组中元素左右对称,则为回文数,反之不是。设置:left(数组最左边下标)right(数组最右边下标...原创 2018-08-19 15:46:02 · 1500 阅读 · 0 评论 -
【剑指offer】编程实现对一个8bit数据的指定为的置0或置1操作
题目 编码实现以下功能的函数 功能:实现对一个8bit的数据(unsigned char类型)的指定位(例如第n位)的置0或者置1操作,并保持其他位不变。 函数声明 void bit_set(unsigned char *p_data, unsigned char position, int flag) 参数说明:p_data是指定源数据,positi...原创 2018-08-28 23:01:31 · 1012 阅读 · 0 评论 -
【剑指offer】my_atoi()与my_itoa() 函数实现
一、将一个数字字符串转换成该字符串对应的数字(包括正整数、负整数) 例如:“12“ 返回12 “-123“ 返回-123 函数原型:int my_atoi(char *str) 这里写代码片一、将一个数字转换成一个字符串...原创 2018-08-19 21:05:17 · 1151 阅读 · 0 评论 -
【LeetCode】无重复字符的最长子串
题目 给定一个字符串,找出不含有重复字符的最长子串的长度。 示例: 给定 “abcabcbb” ,没有重复字符的最长子串是 “abc”,那么长度就是3。 给定”bbbbb”,最长的子串就是”b” ,长度是1。 给定”pwwkew” ,最长子串是 “wke” ,长度是3。请注意答案必须是一个子串,”pwke” 是子序列 而不是子串。 思路 ...原创 2018-08-21 02:02:06 · 898 阅读 · 0 评论 -
【LeetCode】 数组中寻找两数的之和
题目 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例: 给定 nums = [2, 7, 11, 15], target = 22,因为 nums[1] + nums[3] = 7 + 15 = 22,所以返回 [1, 3] 方案一:#include &amp;lt;s...原创 2018-08-21 00:18:27 · 1139 阅读 · 0 评论 -
【剑指offer】将数组中的奇数放在数组的前半部分,偶数放在数组的后半部分
题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分, 所有的偶数位于位于数组的后半部分。思路 首先我们将这个问题简化,我们可以用两个指针标记开始和结尾,用左指针从数组的左边开始遍历,遇到奇数继续偶数停下来,然后用右指针指针从数组的右边开始遍历,遇到偶数继续遇到奇数就停下来,这时候两个指针分别指向数组前边部分的偶数和后半部分的奇数,这...原创 2018-09-02 20:06:22 · 1818 阅读 · 2 评论 -
【剑指offer】两个有序单链表的合并
题目 给定两个有序单链表,合并为一个有序单链表思路 由题目可以得出大概题意 而这里算法的思想跟归并排序是一样的,都是对两个待归并的线性表分别设置1个指针,比较这两个当前指针的大小,将小的结点加入到合并后的线性表中,并向后移动当前指针。若两个线性表中,至少有一个表扫描完,走将对应的另一个表之间整体添加到合并后的线性表中。在这里:链表和数组的区别在于,链表只需要改变...原创 2018-08-22 23:17:49 · 1317 阅读 · 0 评论 -
【九度OJ】查找第K小数
题目 查找一个数组的第K小的数,注意同样大小算一样大。 如 2 1 3 4 5 2 第三小数为3。输入 输入有多组数据。 每组输入n,然后输入n个整数(1<=n<=1000),再输入k。 6 2 1 3 5 2 2 3输出 第k小数 3思路: 要找第k小的数,首先想到排序,但是会有重复数字。我的第一想法是去...原创 2018-08-20 21:37:38 · 1223 阅读 · 0 评论 -
【剑指offer】有一个字符数组的内容为: student a am i ,请你将数组的内容改为 i am a student
【问题描述】:有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。【算法思路】:先将整个字符串整体逆置,再以每个单词为对象局部逆置(这时判断条件复杂一些);这里逆置时,需要一个逆置函数,需要两个参数,首指针和尾指针,由这两个指针锁定一...原创 2018-05-05 22:15:16 · 690 阅读 · 0 评论