头条测试编程题第一道,再给我两分钟时间就好了,错在else if上了,想哭
发布于 2017-03-30 21:09 3000 次浏览 0 赞 来自 试题交流  

using namespace std;

bool upPoint(int *p, int n, int i)

{

if (i!=0)

{

if (p[i-1] < p[i])

return true;

else

return false;

}

else {

if (p[0]<p[1])

{

return true;

}

else {

return false;

}

}

}

int main()

{

int n;

cin >> n;

int *p = new int[n];

bool * state = new bool[n];

int maxStep = 0;

int left = -1;

int right = -1;

int left1 = -1;

int right1 = -1;

int i = 0;

while (i != n)

{

cin >>p[i];

i++;

}

i = 0;

while (i != n)

{

state[i] = upPoint(p, n, i);

i++;

}

i = 0;

while (i<n)

{

if (i == 0 && state[0] == true)

{

left = i;

}

if (i!=0)

{

if(state[i] == true && state[i - 1] == false)

left = i - 1;

}

if (i == n - 1 && state[i] == false)

{

right = i;

if (right - left > maxStep)

{

left1 = left;

right1 = right;

maxStep = right - left;


}

}

if (i<n-1)

{

if (state[i] == false && state[i + 1] == true )

{

right = i;

if (right - left > maxStep)

{

left1 = left;

right1 = right;

maxStep = right - left;


}

}

}

i++;

}

cout << left1 << right1;

    return 0;

}


9 条回复

我也是90,改了之后提交了10分钟一点反应没有,wuwu

2017-03-30 21:11

你写的代码我复杂啊

2017-03-30 21:12
coder_4DS2K3EA 回复 coder_NG9ZZ7P4

我的只有10,太艰难了

2017-03-30 21:13

还好吧,后两个if可以合并一下

2017-03-30 21:15

面试我就不陪你们了

2017-03-30 21:18
coder_NEJ26VHG 回复 acmcoders6Wrgph4

头尾不判断么,初始有上升或者结束有下降都能造成尖峰吧!!!

2017-03-30 21:42

import java.util.*;


public class Main {

public static void main (String[] args) {

    Scanner sc = new Scanner(System.in);

        while (sc.hasNext()) {

        int n = sc.nextInt();

            int[] nums = new int[n];

            for (int i = 0; i < n; i++) {

            nums[i] = sc.nextInt();

            }

            int[] res = getRange(n, nums);

            System.out.println(res[0] + " " + res[1]);

        }

    }

    

    public static int[] getRange (int n, int[] nums) {

    int[] res = new int[2];

        res[0] = res[1] = -1;

        if (n <= 2 || nums.length != n) {

            return res;

        }

        

        LinkedList<Integer> result = new LinkedList<Integer>();

        int i = 1;        

        if (nums[i] > nums[i -1 ]) {       

    result.add(i - 1);    

    }

        while (i < n - 1) {

          if (nums[i - 1] > nums[i] && nums[i] < nums[i + 1]) {

            result.add(i);

            }

            i++;

        }

        if (nums[n - 1] < nums[n - 2]) {

        result.add(n - 1);

        

        }

        

        int maxW = 0;

        int left = 0;

        int right = 0;

        while (result.size() > 1) {      

        left = result.getFirst();

        result.removeFirst();

        right = result.getFirst();

        if (maxW < right - left) {       

        res[0] = left;

        res[1] = right;

        maxW = right - left;

        }

        }

        return res;

    }

}


2017-03-30 21:43
acmcoders6Wrgph4 回复 coder_NEJ26VHG

我做的时候主要是找了函数极小值,头尾不是极小值,就没有考虑。不过你这么一说,这道题确实需要考虑头尾。太大意了,多谢提点

2017-03-30 21:49

我也90%~~

2017-03-30 21:59
添加回复
回到顶部