例如,三个元素的集合A = {a,b,c}的所有子集是:空集a,b,c,ab,ac,bc,abc,共八个 分析: 对于集合A中的每个元素,在其子集中都可能存在或者不存在,所以A的子集有23种. 可以设置一个变量IsExist,用来表示集合A中的某个元素是否存在于子集中,如果IsExist = 1,则表示存在,如果IsExist = 0,则表示不存在 更近一步,可以想到设置一个数组IsExist[3],将数组IsExist与数组A中相同下标的元素绑定在一起. 例如如果IsExist = {0,0,…
题目描述: 请编写一个递归函数,用来输出n个元素的所有子集.例如,三个元素{a,b,c}的所有子集是:{},{a},{b},{c},{a,c},{ac},{b,c},{a,b,c}. 解题思路: 根据子集的定义,集合中的每一个元素在子集中都有两种状态:'1'表示出现,'0'表示不出现:如果所有的元素都不出现,则该子集是空集,如果所有的元素都出现,则该子集是全集. 我们定义一个标记数组tag,用于记录集合中对应的元素是否出现,每层遍历对应集合中的每个元素,都有出现(为'1')和不出现(为'0')两…
//求旋转数组的最小数字,输入一个递增排序的数组的一个旋转,输出其最小元素 #include <stdio.h> #include <string.h> int find_min(int arr[],int len) { int i = 0; for (i = 1; i < len; i++) { if (arr[i] < arr[0]) return arr[i]; } return arr[0]; } int main() { int i; int arr1[] =…
C++递归求解N个元素的所有子集 引言: 我在复习C++遇到了设计递归函数的问题.这个例子,很好的显示了设计递归的方式,思想. 这与斐波那数列不同,这个例子更有应用意义. 问题: 试编写一个递归函数,用来输入n个元素的所有子集. 例如:三个元素{a,b,c} 输出: {a,b,c} {ab} {ac} {bc} {a} {b} {c} {} 设计思路: 首先,递归是使用的if else结构. 然后,就是if中填条件,再在else写调用自身的函数. 详细思路,请看代码. 代码: #include…
顺序表应用3:元素位置互换之移位算法 Time Limit: 1000 ms Memory Limit: 570 KiB Submit Statistic Discuss Problem Description 一个长度为len(1<=len<=1000000)的顺序表,数据元素的类型为整型,将该表分成两半,前一半有m个元素,后一半有len-m个元素(1<=m<=len),借助元素移位的方式,设计一个空间复杂度为O(1)的算法,改变原来的顺序表,把顺序表中原来在前的m个元素放到表的…
顺序表应用2:多余元素删除之建表算法 Time Limit: 3 ms Memory Limit: 600 KiB Submit Statistic Discuss Problem Description 一个长度不超过10000数据的顺序表,可能存在着一些值相同的“多余”数据元素(类型为整型),编写一个程序将“多余”的数据元素从顺序表中删除,使该表由一个“非纯表”(值相同的元素在表中可能有多个)变成一个“纯表”(值相同的元素在表中只保留第一个).要求:       1.必须先定义线性表的结构与…
<Algorithms算法>笔记:元素排序(3)——洗牌算法 Algorithms算法笔记元素排序3洗牌算法 洗牌算法 排序洗牌 Knuth洗牌 Knuth洗牌代码 洗牌算法 洗牌的思想很简单,就是像洗扑克牌一样,对一组数据进行随机打乱,这个算法在很多应用里都非常有用,特别是对于后面需要介绍的快排来说,这个算法直接影响了快排的效率. 洗牌的算法这里提了2种 排序洗牌 思想很简单,先对每个元素生成一个随机数,然后对这些随机数进行排序 排序前 排序后 Knuth洗牌 一个更简单的算法,不用sort…
/*====================================================================== 著名的菲波拉契(Fibonacci)数列,其第一项为0,第二项为1,从第三项开始, 其每一项都是前两项的和.编程求出该数列前N项数据. 注意: Fibonacci数列的递归是“双线”递归,可以画出类似树形结构的递归树. 它不是纯粹的“单线”递归然后再“单线”回溯. 所以,这个题目的没有办法像“输出十进制数的二进制表示”这样,在递归函数的递归阶段或者回溯…
晚上回去复习下原来的资料,返现Codebook中有个关于“展开一个嵌套序列”的话题. 任务说明:序列中的子项可能是序列,子序列的子项仍可能是序列,以此类推,则序列嵌套可以达到任意的深度.需要循环遍历一个序列,将其中所有的子序列展开成一个单一的.只具备基本子项的序列. 举例来说就是形如如下序列a: a = [(1, [2, 3, (7, 8)],), 4, [5, 6, (9, 10)]],根据资料上的代码输出的结果如下: (图1),而我可能对于理解任务中所说的原子级别的元素可能有点问题.我根据自…
#include<iostream> #include<vector> #include<string> using namespace std; int main() { ][]={ {,,,}, {,,,}, {,,,} }; ]=ia;p!=ia+;++p) ;++q) cout<<*q<<' '; cout<<endl; ;i<;i++) ;j<;++j) cout<<ia[i][j]<<'…
def multiply_list(items): tot = 1 for x in items: tot *= x return tot print(multiply_list([1,2,-8]))…
<?php $arr = array( array( array( array( array( ,, ) ) ), array( ,,) ) ), array(, , ) ); function arr_foreach ($arr) { static $data; if (!is_array ($arr)) { return $data; } foreach ($arr as $key => $val ) { if (is_array ($val)) { arr_foreach ($val);…
引言 在自己刚刚毕业不久的时候,去了一家公司面试,面试官现场考了我这道题,我记忆深刻,当时没有想到思路,毫无疑问被面试官当成菜鸟了.最近刚好在研究数组的各种算法实现,就想到这道题,可以拿来实现一下,纪念自己逝去的青春. 需求 假设有这样一个数组 [1,2,3,4,5] 现在想要左移或者右移N位,比如移动1位 //左移1位 [2,3,4,5,1] //右移1位 [5,1,2,3,4] 算法实现 这样一道题目,你先不要看我下面的代码,自己思考一下如何实现它,不管是复杂的还是简单的方法.可以先告诉你我…
题解:用一个for,循环m次,每次都把最前面的放到最后面,就可以了. #include <stdio.h> #include <stdlib.h> #include <string.h> const int maxn = 1000000; struct node { int *elem; int len; }; void Creatlist(int len, struct node &list) { list.elem = (int *)malloc(maxn*…
题解: 每次询问一遍,如果已经存在就不用插入表中了. #include <stdio.h> #include <stdlib.h> #include <string.h> struct node { int *elem; int len; }; void CreatList(int m, struct node &list) { list.elem = (int *)malloc(101 * sizeof(int)); list.len = 0; int x,f…
Top N问题在搜索引擎.推荐系统领域应用很广, 如果用我们较为常见的语言,如C.C++.Java等,代码量至少也得五行,但是用Python的话,只用一个函数就能搞定,只需引入heapq(堆队列)这个数据结构即可.今天偶然看到这个库,特意记下之. 先看一个例子: >>> import heapq >>> nums = [1,8,2,23,7,-4,18,23,42,37,2] >>> print heapq.nlargest(3, nums) [42,…
要求: 设计一个算法从一片英语文章或者英语字符串里面输出其中最长的单词. Input: string     Output: string 尽可能多的设计测试用例来测试这个算法. 考虑空间和时间复杂度看作是一个加分项 Version1.0 using System; namespace GetLongestWord { class Program { static void Main(string[] args) { Console.WriteLine("Please input a strin…
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2. 你不需要考虑数组中超出新长度后面的元素. 示例 2: 给定 nums = [0,0,1,1,1,2,2,3,3,4], 函数应该返回新的长度 5, 并且原数组 nums…
//删除线性表中不为x的元素. void delete_list(Sqlist &L,int x){ ; ;i < L.length;i++){ if(L.data[i] != x){ L.data[k] = L.data[i]; k++; } } L.length = k; } //先统计不为x的个数,然后将线性表中不为x的数据向前移动K个. void delete_list(Sqlist &L,int x){ ,i=; while(i < L.length){ if(L.d…
实际案例: 1. 某随机序列 [12,5,6,4,6,5,5,7]中,找到出现次数最高的3个元素,它们出现的次数是多少? 2. 对于某英文文章的单词,进行词频统计,找到出现次数最高的10个单词,它们出现次数是多少? 案例一:  1. 某随机序列 [12,5,6,4,6,5,5,7]中,找到出现次数最高的3个元素,它们出现的次数是多少? 解决方案: 方案1 : 将序列转化为字典 {元素:频度} ,根据字典中的值排序 '''列表&生成器解析的缺点:假如列表很大,比如1万个,只需要最大前三个时候,对整…
之前一段时间一直在准备面试, 因而博客太久没更新: 现在基本知识点都复习完毕, 接下来就分享下 面试的一些常见问题: 去正规的互联网公司笔试.面试有很大的概率会碰到 使用javascript实现数组去重 的编码问题:如:魅族笔试题: 本博文就 js 如何实现数组去重整理出5种方法,并附上演示Demo 以及 源码. 1.遍历数组法 最简单的去重方法, 实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法“indexOf”是ECMAScript5 方法,…
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # number 1 to 10 data mnist = input_data.read_data_sets('MNIST_data', one_hot=True) def compute_accuracy(v_xs, v_ys): global prediction y_pre = sess.run(prediction, fe…
章 C + +程序设计 大家好!现在我们将要开始一个穿越" 数据结构.算法和程序" 这个抽象世界的特殊旅程,以解决现实生活中的许多难题.在程序开发过程中通常需要做到如下两点:一是高效地描述数据:二是设计一个好的算法,该算法最终可用程序来实现.要想高效地描述数据,必须具备数据结构领域的专门知识:而要想设计一个好的算法,则需要算法设计领域的专门知识. 在着手研究数据结构和算法设计方法之前,需要你能够熟练地运用 C + +编程并分析程序,这些基本的技能通常是从C + +课程以及其他分散的课程…
章 C + +程序设计 大家好!现在我们将要开始一个穿越" 数据结构.算法和程序" 这个抽象世界的特殊旅程,以解决现实生活中的许多难题.在程序开发过程中通常需要做到如下两点:一是高效地描述数据:二是设计一个好的算法,该算法最终可用程序来实现.要想高效地描述数据,必须具备数据结构领域的专门知识:而要想设计一个好的算法,则需要算法设计领域的专门知识. 在着手研究数据结构和算法设计方法之前,需要你能够熟练地运用 C + +编程并分析程序,这些基本的技能通常是从C + +课程以及其他分散的课程…
题目: 输出有序数组的中两个元素差值为指定值diff的两个元素. 思路: 这与输出两个元素的和的值为一定值类似,需要两个指针,不同的是:指针不是一左一右,而是一前一后. 如果差值等于diff,则返回:如果差值大于diff,则左指针右移:如果差值小于diff,则右指针右移. public void findDiffNum(int[] a,int diff){      ) return;      ;      ;      int length = a.length;      while(i<…
#include <MsgBoxConstants.au3> Local $aDays = StringSplit("Mon,Tues,Wed,Thur,Fri,Sat,Sun", ",") :用逗号作为分隔符,分割字符串,返回分割后的元素的数组 For $i = To $aDays[] :循环变量i的初始值为1,数组元素起始位置为0 MsgBox($MB_SYSTEMMODAL, "",$aDays[$i]) :信息框输出每一个元素…
以下内容基本来自<算法笔记>,作者为胡凡,建议直接买书看,我这里只是摘抄部分当笔记,不完整的. 简单模拟 就是一类"题目怎么说你就怎么做"的题目.这类题目不涉及算法,只是根据题目描述来进行代码的编写. 例子: 思路: #include <cstdio> init main() { int n, step = 0; scanf("%d", &n); while(n != 1) { if(n%2==0) { n = n / 2; } el…
来源:据说是某一年某个公司的面试题 题目:求1+2+…+n, 要求不能使用乘除法.for.while.if.else.s witch.case 等关键字以及条件判断语句(A?B:C) 分析:这题本来很简单,但是不能用循环和条件判断语句.但是理论上所有的递归都可以转化为循环,那是否可以用递归代替循环呢?照着这个思路走下去,貌似可以.可是用递归的话,递归怎么终止呢?这就得在return语句中做文章了.最让人奔溃的是不让用乘除法.但是乘法本质上是加法的累加. 思路: 把循环化为递归. 乘法改为递归实现…
XML 文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶". 一个 XML 文档实例 XML 文档使用简单的具有自我描述性的语法: <?xml version="1.0" encoding="UTF-8"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</hea…
  给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数.第二行给出其后序遍历序列.第三行给出其中序遍历序列.数字间以空格分隔. 输出格式:在一行中输出该树的层序遍历的序列.数字间以1个空格分隔,行首尾不得有多余空格. 输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7输出样例:4 1 6 3 5 7 2 用数组模拟二叉树,设根结点为n,左孩子编号为2n,右孩子编号为2…