i<j<k

Question:

Given an array, does it exist that

i < j < k where A[i] < A[J] < [K].

// Option 1.
// Brute force.
// Given any index i, return true if there exists:
// A[m] < A[i], m < i
// A[n] > A[i], n > i

boolean hasLessInLeft(int[] a, int i)
{
  for (int index = 0 ; index < i ; index ++)
  {
    if (a[index] < a[i])
      return true;
  }
  return false;
}

boolean hasMoreInRight(int[] a, int i)
{ ... }

// O(n ^ 2)
boolean has3Increasing(int[] a)
{
  for (int i = 0 ; i < a.length ; i ++)
  {
    if (hasLessInLeft(a, i) && hasMoreInRight(a, i))
      return true;
  }
  return false;
}

// A better solution?
// maintain min, mid

boolean has3Increasing(int[] a)
{
  Integer min = null;
  Integer mid = null;
  
  for (int i : a)
  {
    if (min == null || i < min)
    {
      min = i;
    }
    else if (mid == null || i < mid)
    {
      mid = i    
    }
    else if (i > mid) // This means there must be a min before mid.
    {
      return true;
    }    
  }
  
  return false;
}
时间: 2024-11-08 15:07:22

i<j<k的相关文章

CodeForces 61E Enemy is weak 求i&lt;j&lt;k &amp;&amp; a[i]&gt;a[j]&gt;a[k] 的对数 树状数组

题目链接:点击打开链接 题意是求 i<j<k && a[i]>a[j]>a[k] 的对数 如果只有2元组那就是求逆序数的做法 三元组的话就用一个树状数组x表示 数字i前面有多少个比自己大的个数 然后每次给这个y数组求和,再把x中>a[i]的个数存入y中即可 #include <algorithm> #include <cctype> #include <cassert> #include <cstdio> #in

求序列中满足Ai &lt; Aj &gt; Ak and i &lt; j &lt; k的组数 树状数组 HIT 2275 Number sequence

http://acm.hit.edu.cn/hoj/problem/view?id=2275 Number sequence   Source : SCU Programming Contest 2006 Final   Time limit : 1 sec   Memory limit : 64 M Submitted : 1632, Accepted : 440 Given a number sequence which has N element(s), please calculate

找出数组a[]中符合a[i]+a[j]=K的数对

1.问题描述 在一个整数数组中,元素都为整数,没有重复数.设计一个算法找出满足两个数的和等于k值得数对.例如a[]={1,3,8,6,4}中两个数的和为7的数对为(1,6)和(3,4). 2. 解决方案 2.1 暴力法 首先先到的可能就是暴力法,暴力没举出所有的数对然后再判对他们的和是否为K,但这种方法的时间复杂度为O(n^2),效率比较低,一般不可取.代码也就不写了.. 2.2 二分法 先对数组进行排序,然后使用二分查找算法,使用两个指针分片指向第一个和最后一个元素,然后从两端同时向中间遍历.

三元逆序对 求i&lt;j&lt;k &amp;&amp; a[i]&gt;a[j]&gt;a[k] 的对数 树状数组Codeforces 61E Enemy is weak

http://codeforces.com/problemset/problem/61/E E. Enemy is weak time limit per test 5 seconds memory limit per test 256 megabytes input standard input output standard output The Romans have attacked again. This time they are much more than the Persian

find min between A[i] + B[j] - K

给两个已经排序好的数组A,B,和一个常数k,  找i,j使得 Ai + Bj - k 的绝对值最小 分析: Two pointer, i从A从前往后扫,j从B从后往前扫.if (A[i]+B[j] > k){   j--;}else {   i++;}整个过程不断更新答案 原文地址:https://www.cnblogs.com/beiyeqingteng/p/12268154.html

Codeforces 61E Enemy is weak 乞讨i&amp;lt;j&amp;lt;k &amp;amp;&amp;amp; a[i]&amp;gt;a[j]&amp;gt;a[k] 对数的 树阵

主题链接:点击打开链接 意大利正在寻求称号 i<j<k && a[i]>a[j]>a[k] 的对数 假设仅仅有2元组那就是求逆序数的做法 三元组的话就用一个树状数组x表示 数字i前面有多少个比自己大的个数 然后每次给这个y数组求和,再把x中>a[i]的个数存入y中就可以 #include <algorithm> #include <cctype> #include <cassert> #include <cstdio&

排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结束.时间复杂度:O(n^2) 选择排序:每次在无序队列中"选择"出最大值,放到有序队列的最后,并从无序队列中去除该值(具体实现略有区别).时间复杂度:O(n^2) 直接插入排序:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的 移动数据,空出一个适当的位置,把待插

HDU5006 Resistance (2014年鞍山赛区网络赛J题)

1.题目描述:点击打开链接 2.解题思路:本题利用缩点+高斯消元解决.本题的最大特点就是电阻非零即一,如果电阻为0,说明零点之间是等电位点,可以看做一个整体,自然可以想到先利用并查集进行缩点操作,将复杂的电路图转化为不相等的电位点构成的电路图.如果转换完毕后,发现s和t在一个集合中,说明两点之间是等电位的,等效电阻为0,否则,对转换后的图G'重新判断连通性,依然可以利用并查集解决,如果发现不连通,说明s与t之间开路,电阻为inf,否则,就可以根据tot个点的电位列写方程. 我们令有1A的电流从点

K Smallest Sums

uva11997:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=24&problem=3148&mosmsg=Submission+received+with+ID+13942033 题意:给你k个数组,每个数组里有k个数,然后每个数组里面取出一个数相加会得到一个数,让你求出最小的看的数. 题解:白书的分析: 分析:这题有