精华内容
下载资源
问答
  • 93.在一个int 数组里查找这样数,它大于等于左侧所有数,小于等于右侧所有数。 */ void GetMidNum(int *p,int len) { int *b=new int[len]; b[len-1]=numeric_limits::max(); for(int i=len-2;i>=0;i--) ...
    /*
    93.在一个int 数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数。
    */
    void GetMidNum(int *p,int len)
    {
    	int *b=new int[len];
    	b[len-1]=numeric_limits<int>::max();
    	for(int i=len-2;i>=0;i--)
    	{
    		if(p[i+1]<b[i+1])
    			b[i]=p[i+1];
    		else
    			b[i]=b[i+1];
    	}
    	int max=numeric_limits<int>::min();
    	for(int i=0;i<len;i++)
    	{
    		if(p[i]>max&&p[i]<b[i])
    			cout<<p[i]<<endl;
    		if(p[i]>max)
    			max=p[i];
    	}
    	delete[] b;
    }
    
    void GetMidNumTest()
    {
    	int p[]={-10,4,-2,0,-11,5,1,6,7,16,10,8,9,15,13};
    	int len=sizeof(p)/sizeof(int);
    	cout<<"the num which bigger than lefts and less than right : "<<endl;
    	GetMidNum(p,len);
    }

    展开全文
  • 题目:输入一颗二元查找树,将该树转换为它镜像,即在转换后二元查找树中,左子树结点都大于右子树结点。用递归和循环两种方法完成树镜像转换。 例如输入:  8  / \  6 10  /\ /\ 5 7 9 ...
    题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。

    例如输入:

         8
        /  \
      6      10
     /\       /\
    5  7    9   11

    输出:

          8
        /  \
      10    6
     /\      /\
    11  9  7  5

    定义二元查找树的结点为:

    struct BSTreeNode // a node in the binary search tree (BST)
    {
          int          m_nValue; // value of node
          BSTreeNode  *m_pLeft;  // left child of node
          BSTreeNode  *m_pRight; // right child of node
    };



    分析:尽管我们可能一下子不能理解镜像是什么意思,但上面的例子给我们的直观感觉,就是交换结点的左右子树。我们试着在遍历例子中的二元查找树的同时来交换每个结点的左右子树。遍历时首先访问头结点8,我们交换它的左右子树得到:

          8
        /  \
      10    6
     /\      /\
    9  11  5  7

    我们发现两个结点6和10的左右子树仍然是左结点的值小于右结点的值,我们再试着交换他们的左右子树,得到:

          8
        /  \
      10    6
     /\      /\
    11  9  7   5

    刚好就是要求的输出。

    上面的分析印证了我们的直觉:在遍历二元查找树时每访问到一个结点,交换它的左右子树。这种思路用递归不难实现,将遍历二元查找树的代码稍作修改就可以了。参考代码如下:

    ///
    // Mirror a BST (swap the left right child of each node) recursively
    // the head of BST in initial call
    ///
    void MirrorRecursively(BSTreeNode *pNode)
    {
          if(!pNode)
                return;
    
          // swap the right and left child sub-tree
          BSTreeNode *pTemp = pNode->m_pLeft;
          pNode->m_pLeft = pNode->m_pRight;
          pNode->m_pRight = pTemp;
    
          // mirror left child sub-tree if not null
          if(pNode->m_pLeft)
                MirrorRecursively(pNode->m_pLeft);  
    
          // mirror right child sub-tree if not null
          if(pNode->m_pRight)
                MirrorRecursively(pNode->m_pRight);
    }


    由于递归的本质是编译器生成了一个函数调用的栈,因此用循环来完成同样任务时最简单的办法就是用一个辅助栈来模拟递归。首先我们把树的头结点放入栈中。在循环中,只要栈不为空,弹出栈的栈顶结点,交换它的左右子树。如果它有左子树,把它的左子树压入栈中;如果它有右子树,把它的右子树压入栈中。这样在下次循环中就能交换它儿子结点的左右子树了。参考代码如下:

    ///
    // Mirror a BST (swap the left right child of each node) Iteratively
    // Input: pTreeHead: the head of BST
    ///
    void MirrorIteratively(BSTreeNode *pTreeHead)
    {
          if(!pTreeHead)
                return;
    
          std::stack<BSTreeNode *> stackTreeNode;
          stackTreeNode.push(pTreeHead);
    
          while(stackTreeNode.size())
          {
                BSTreeNode *pNode = stackTreeNode.top();
                stackTreeNode.pop();
    
                // swap the right and left child sub-tree
                BSTreeNode *pTemp = pNode->m_pLeft;
                pNode->m_pLeft = pNode->m_pRight;
                pNode->m_pRight = pTemp;
    
                // push left child sub-tree into stack if not null
                if(pNode->m_pLeft)
                      stackTreeNode.push(pNode->m_pLeft);
    
                // push right child sub-tree into stack if not null
                if(pNode->m_pRight)
                      stackTreeNode.push(pNode->m_pRight);
          }
    }


    本文已经收录到《剑指Offer——名企面试官精讲典型编程题》一书中,有改动,书中的分析讲解更加详细。欢迎关注。

    博主何海涛对本博客文章享有版权。网络转载请注明出处http://zhedahht.blog.163.com/。整理出版物请和作者联系。


    展开全文
  • 每行数据长度不等,是用空格分开若干个(不大于100个)正整数(不大于100000),请注意行内和行末可能有多余空格,你程序需要能处理这些空格。 输出格式 要求程序输出1行,含两个整数m n,用空格分隔。 其中,...

    找出断号的数字和重号的数字。
    假设断号不可能发生在最大和最小号。

    输入格式

    要求程序首先输入一个整数N(N<100)表示后面数据行数。

    接着读入N行数据。

    每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000),请注意行内和行末可能有多余的空格,你的程序需要能处理这些空格。

    输出格式

    要求程序输出1行,含两个整数m n,用空格分隔。

    其中,m表示断号,n表示重号

    样例输入

    2
    5 6 8 11 9
    10 12 9

    样例输出

    7 9

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Scanner;
    
    public class 数据检测 {
    	public static void main(String[] args) {
    
    		ArrayList<Integer> arr = new ArrayList<Integer>();
    		Scanner sc = new Scanner(System.in);
    		int N = sc.nextInt();
    		sc.nextLine();
    
    		if (N < 100) {
    			for (int i = 0; i < N; i++) {
    				String line = sc.nextLine();
    				String[] split = line.split(" ");
    				for (int j = 0; j < split.length; j++) {
    					arr.add(Integer.parseInt(split[j]));
    				}
    			}
    			Collections.sort(arr);
    			int m = 0;
    			int n = 0;
    			for (int i = 1; i < arr.size(); i++) {
    				if (arr.get(i) - arr.get(i - 1) == 2) {
    					m = arr.get(i) - 1;
    				}
    //				else if (arr.get(i) == arr.get(i - 1)) {
    				else if (arr.get(i).equals(arr.get(i - 1))) {
    					n = arr.get(i);
    				}
    			}
    			System.out.println(m + " " + n);
    		}
    
    	}
    }
    
    展开全文
  • 查找最小k 个元素 题目:输入n 个整数,输出其中最小k 个。 例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小4 个数字为1,2,3 和4。 这是比较有名top k问题。求在一堆数中,这堆数要大于k。...
    查找最小的k 个元素
    题目:输入n 个整数,输出其中最小的k 个。

    例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 和4。


    这是比较有名的top k问题。求在一堆数中,这堆数要大于k。假设有n个。求出前最小的n的元素


    1.全排。将所有元素排序,找出前n个。复杂度n*logn。
    2.插入排序。需要k趟。复杂度是nk。
    3.堆排序。建一个大小为k的最小二叉堆。建堆复杂度是k。剩下元素个数为n-k要进入堆中。需要和堆顶元素比较。下溯(n-k)*logk。所以总的复杂度是n*logk。
    4.改进的快排。快排主要是选择轴点。左侧的元素都要比轴点小,右侧的都要比轴点大。[low,pivot-1] pivot [pivot+1,high]
    那么如果[low,pivot-1]的元素个数pivot-low=n。这样前n个最小的已经出来了
    如果[low,pivot-1]的元素个数pivot-low>n。那么前n个最小的一定在区间[low,pivot-1]。区间缩小了。
    如果[low,pivot-1]的元素个数pivot-low<n。那么前n个最小的已经有pivot-low个被找出来了。还剩下n-(pivot-low)在区间[pivot,high]中。


    int TopN(int *p,int low,int high,int n)
    {
    	if(high-low+1<=n)
    		return high;
    	int pivot=Parition(p,low,high);
    	if(pivot-low==n)
    		return pivot-1;
    	else if(pivot-low>n)
    		return TopN(p,low,pivot-1,n);
    	else
    		return TopN(p,pivot+1,high,n-(pivot-low+1));
    }
    
    void TopNTest()
    {
    	int p[]={1,2,15,-10,0,7,-1,25,29,8,6,16,5};
    	int len=sizeof(p)/sizeof(int);
    	cout<<"array : ";
    	ShowArray(p,len);
    	int n=0;
    	cout<<"input n : ";
    	cin>>n;
    	int end=TopN(p,0,len-1,n);
    	cout<<"array : ";
    	ShowArray(p,len);
    }

    6
    展开全文
  • 使用db.command.gt(n):查找大于n的数据 同理,使用 gte查大于等于 eq查等于 net查不等于 lt查小于 lte查小于等于 in([0,100])查等于0或100的记录 nin([0,100])查不是0跟100的记录 查找大于0,小于5的 price 这么用...
  • (VBA)excel单元格中查找特殊值

    千次阅读 2010-01-28 17:01:00
    用途:用于在当前sheet的B列的B1~B1000中查找大于100的数据作者:冯明亮日期:2010-01-28Sub 查找超量程的值() For i = 1 To 1000 Range("B" & i).Select If Selection.Value > 100 Then MsgBo
  • 海量数据排序和查找问题

    千次阅读 2011-07-30 20:35:45
    1.从100亿数据中找出最大1000个数。 分析:数据多大十几个G,直接读入内存用快排在取值是不行,而且就算内存够了,本例子中不需要整体排序,只需要最大1000个数据,所以很多时间都浪费了。 方法1 ,建立一个...
  • 根据人口普查结果,知道目前淄博市大约500万人口,你任务是帮助人口普查办公室按年龄递增顺序输出每个年龄有多少人,其中不满1周岁按0岁计算,1到2周岁按1岁计算,依次类推,大于等于100
  • 否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录关键字大于查找关键字则进一步查找前一子表;否则进一步查找后一子表。 重复以上过程,直到找到满足条件记录,使查找成功,或直到子表不存在为止...
  • 二分查找:给定数组是有序的,给定一个key值。每次查找最中间的值,如果相等,就返回对应...例如有一组给定数组是有序的数据: int[] arr 10 20 30 40 50 60 70 80 90 100 定义两个边界, 下标low表示左边...
  • Excel的查找替换功能,只能对文本类数据查找较为得力,若需查找数字类型的数据,如查找大于100的数字,就无能为力,此篇Excel催化剂补足其短板。 Excel数据类型知识背景介绍 用好Excel,必不可少的是要对Excel...
  • 输入一颗二元查找树,将该树转换为它镜像,即在转换后二元查找树中,左子树结点都大于右子树结点。用递归和循环两种方法完成树镜像转换。 例如输入: 8 / / 6 10 / / / / 5 7 9 11输出: 8 / ...
  • (题目来源于v_JULY_v整理,微软公司等数据结构+算法面试100题,July博客http://blog.csdn.net/v_JULY_v) 题目:输入一颗二元查找树,将该树转换为它镜像, 即在转换后二元查找树中,左子树结点都...
  • 即在转换后二元查找树中,左子树结点都大于右子树结点。 用递归和循环两种方法完成树镜像转换。 分析: 题目要求求解一个二元搜索树镜像,用两种方法实现,递归和非递归。 首先,对于求解一...
  • MongoDB查询数据

    2018-05-24 19:10:29
    1、向demos集合中插入10000条数据var ...i++){arr.push({counter:i})}db.demo.insert(arr)2、查找counter小于100的数据db.demos.find({counter:{$lt:100}})3、查找counter大于666的数据db.demos.find({counter:{$gt...
  • 基础练习 查找整数

    2021-03-25 22:46:50
    第二行包含n个非负整数,为给定数列,数列中每个数都不大于10000。 第三行包含一个整数a,为待查找的数。 输出格式 如果a在数列中出现了,输出它第一次出现位置(位置从1开始编号),否则输出-1。 样例输入 6 1 ...
  • XYOJ 选择查找

    2017-07-24 12:53:25
    输入数据保证每个学生成绩在0至100之间(包含0和100)。 输出 输出每一个成绩大于等于80分学生学号和成绩,每一个学生一行,用一个空格隔开学号和成绩。 样例输入 30100 90 30101 75 30105 7
  • 第二行包含n个非负整数,为给定数列,数列中每个数都不大于10000。 第三行包含一个整数a,为待查找的数。 输出格式 如果a在数列中出现了,输出它第一次出现位置(位置从1开始编号),否则输出-1。 样例输入 6 1 ...
  • 第二行包含n个非负整数,为给定数列,数列中每个数都不大于10000。 第三行包含一个整数a,为待查找的数。 输出格式 如果a在数列中出现了,输出它第一次出现位置(位置从1开始编号),否则输出-1。 样例输入 6 1 ...
  • 第二行包含n个非负整数,为给定数列,数列中每个数都不大于10000。 第三行包含一个整数a,为待查找的数。 输出格式 如果a在数列中出现了,输出它第一次出现位置(位置从1开始编号),否则输出-1。 样例输入 6 1 ...
  • 数据存储

    2013-01-04 12:59:47
    1.所有的数据都是同时读写的。如果你要经常进行写操作,或数据量很大,这种方法可能会占用大量时间,让程序变慢。一般你的首选项文件不应该超过100K,大于时,考虑使用Core Data来存储。 2.首选项文件对于信息的...
  • 第二行包含n个非负整数,为给定数列,数列中每个数都不大于10000。 第三行包含一个整数a,为待查找的数。 输出格式 如果a在数列中出现了,输出它第一次出现位置(位置从1开始编号),否则输出-1。 样例输入 6 1 ...
  • 查找字符串

    2013-04-28 13:04:00
    描述 小明得到了一张写有奇怪字符串...=100).表示测试数据组数。 接下来每组数据第一行包含两个整数n,m(n,m<100000),分别表示有n个字符串,小明要问你m次。 接下来n行,每行包含一个字符串,长度不大于15。 ...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 260
精华内容 104
关键字:

查找大于100的数据