乱序数组找出前面的都比他小后面的都比他大的数

 1 int f(int*a,int*b,int n)
 2 {
 3     if(!a||!b||n<3) return -1;
 4     int*temp=new int[n]();
 5     int max=a[0],count=0;
 6     for (int i=1;i<n-1;i++)
 7         if(a[i]>max)
 8         {
 9             temp[i]++;
10             max=a[i];
11         }
12     int min=a[n-1];
13     for (int i=n-2;i>0;i--)
14         if(a[i]<min)
15         {
16             temp[i]++;
17             min=a[i];
18         }
19     for (int i=1;i<n-1;i++)
20         if(temp[i]==2) b[count++]=a[i];
21     delete[]temp;
22     return count;
23 }
时间: 2024-10-09 23:00:17

乱序数组找出前面的都比他小后面的都比他大的数的相关文章

最快效率求出乱序数组中第k小的数

题目:以尽量高的效率求出一个乱序数组中按数值顺序的第k 的元素值 思路:这里很容易想到直接排序然后顺序查找,可以使用效率较高的快排,但是它的时间复杂度是O(nlgn),我们这里可以用一种简便的方法,不一定需要排序,使用快速排序中双向分区的扫描方法,扫描出主元下标,然后根据主元的值将数组划分成一半大,一半小.然后再根据主元下标与k进行比较,如果相等,说明主元就是我们要找的数,如果大于k,说明k所代表的值在小的那边,继续向小的那部分递归,如果小于k,说明k代表的值在大的那边,继续向大的那部分递归.这

106. Construct Binary Tree from Inorder and Postorder Traversal根据后中序数组恢复出原来的树

[抄题]: Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that duplicates do not exist in the tree. For example, given inorder = [9,3,15,20,7] postorder = [9,15,7,20,3] Return the following binary tree: 3 /

算法导论:快速找出无序数组中第k小的数

题目描述: 给定一个无序整数数组,返回这个数组中第k小的数. 解析: 最平常的思路是将数组排序,最快的排序是快排,然后返回已排序数组的第k个数,算法时间复杂度为O(nlogn),空间复杂度为O(1).使用快排的思想,但是每次只对patition之后的数组的一半递归,这样可以将时间复杂度将为O(n). 在<算法导论>有详细叙述 这里主要用C++实现,实现思路就是先选取当前数组的第一个数作为"主轴",将后面所有数字分成两部分,前面一部分小于"主轴",后面一部

利用 Process Monitor 找出某个 Windows 选项所对应的注册表值

多 时候我们要调整一项 Windows 的功能时只需更改一下注册表即可实现.而很多大家眼中所谓的高手,对 Windows 注册表更是玩得出神入化.难道这些高手把 Windows 注册表都记下来了?答案是当然不可能.那么,我们怎么知道 Windows 中的某个功能对应的是哪个注册表值呢? 在接下来的文章内容中,我们将以示例的方式教会大家使用 Process Monitor 的事件监控功能来找出某个 Windows 选项所对应的注册表值. 使用Process Monitor找出注册表值 相 信大家都

仅需七步,帮你找出最具盈利能力的商业模式!

本文作者开办线上课堂,教大家如何在网上赚钱开辟出属于自己的事业.他给课程的定价最低为 5000 美金,最高是 2 万 5 千美金(取决于不同的课程类型).2015 年的利润已经超过了 150 万美金. 他给大家了 7 个步骤,借此能够在你的产品服务中找出最具盈利能力的商业模式是什么,其内容包括了如何定价,如何找出最具利润贡献值的客户人群,如何对产品进行定位等等多个内容. 当有了一个解决方案,能够为正确的客户解决最具「痛点」的问题,那么这个客户就会很愿意为你付钱,情况好的话,会愿意付很多的钱. 不

leetcode 1: 找出两个数相加等于给定数 two sum

问题描述 对于一个给定的数组,找出2个数,它们满足2个数的和等于一个特定的数,返回这两个数的索引.(从1开始) Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target,

一个组数中只有两个数只出现了一次,其他所有数都是成对出现的,找出这两个数

原题:给一组数,只有两个数只出现了一次,其他所有数都是成对出现的.怎么找出这两个数. 编写函数实现. 对于一组数中只有一个数只出现一次,其他所有数都是成对出现的,我们采用了对全部数组元素进行异或,经过分析发现异或全部数组的数所得到的数为整个数组中两个只出现一次数异或的结果先对所有的元素进行异或.可以通过将结果转换为二进制,在移位二进制数中的第一个1,然后根据这个1的判断条件将整个数组分为两组,分别对两个组的元素进行全部异或,则就找出两个不同的数. 例如:数组中的元素为下面这些数: 0000   

一个整型数组里除了两个不同数字之外,其它的数字都出现了两次。请写程序找出这两个只出现一次的数字。

曾经做过一道水题找出除了一个数字之外,其他数字都有2个.直接异或 最后结果就是那个数. 现在变成存在2个不一样的数字,假设成x,y,那么可以O(n)求出x^y,因为x,y不同,所以异或的结果不为0,看成2进制数,那么找到第一位为1 的位置,将这个位置设置为划分点,数组里所有这个位置为1 的异或一次,所有为0的再异或一次,最终求出的两个即为两个独特的数字. #include <stdio.h> #include <string.h> #include <algorithm>

逻辑题(一)一个整型数组里除了两个数字之外,其他的数字都出现了两次,请写程序找出这两个只出现一次的数字。

package test; import java.util.*; public class test17 { public static void main(String[] args) { //一个整型数组里除了两个数字之外,其他的数字都出现了两次. // 请写程序找出这两个只出现一次的数字. int[] ints = {1,1,2,5,5,6,3,3}; Map<Integer, Integer> map = new HashMap<Integer, Integer>();