zoukankan      html  css  js  c++  java
  • hihoCoder#1128 二分·二分查找

    原题地址

    一开始没搞懂题目是想干什么,于是写了一个扫一遍的代码,A了,如下:

    代码:

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 int main() {
     6   int N, K, a;
     7   bool found = false;
     8   int lt = 0;
     9 
    10   scanf("%d%d", &N, &K);
    11   for (int i = 0; i < N; i++) {
    12     scanf("%d", &a);
    13     if (a == K)
    14       found = true;
    15     if (a < K)
    16       lt++;
    17   }
    18   printf("%d
    ", (found ? lt + 1 : -1));
    19 
    20   return 0;
    21 }

    做到后面一题的时候才明白题目是什么意思,代码如下:

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 #define SIZE 100000
     6 
     7 int N, K;
     8 int a[SIZE];
     9 
    10 int ltc(int left, int right) {
    11   if (left >= right)
    12     return 0;
    13 
    14   int l = left;
    15   int r = right;
    16   int p = a[left];
    17 
    18   while (l < r) {
    19     while (l < r && a[r] > p)
    20       r--;
    21     a[l] = a[r];
    22     while (l < r && a[l] < p)
    23       l++;
    24     a[r] = a[l];
    25   }
    26   a[l] = p;
    27 
    28   if (a[l] == K)
    29     return l - left;
    30   else if (a[l] < K)
    31     return l - left + 1 + ltc(l + 1, right);
    32   else
    33     return ltc(left, l - 1);
    34 }
    35 
    36 int main() {
    37   bool found = false;
    38 
    39   scanf("%d%d", &N, &K);
    40   for (int i = 0; i < N; i++) {
    41     scanf("%d", &(a[i]));
    42     found |= (a[i] == K);
    43   }
    44 
    45   printf("%d
    ", (found ? ltc(0, N - 1) + 1: -1));
    46 
    47   return 0;
    48 }
  • 相关阅读:
    oracle 随机函数
    cmd和dos的区别
    SAP HANA 常用函数
    编程语言发展史
    PL/SQL Job
    ETL工具总结
    JDK、JRE、JVM三者间的关系
    Redis过滤器如何与Envoy代理一起使用
    apache配置https
    kubernetes监控和性能分析工具:heapster+influxdb+grafana
  • 原文地址:https://www.cnblogs.com/boring09/p/4412227.html
Copyright © 2011-2022 走看看