中级农民
- 积分
- 110
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2015-3-25
- 最后登录
- 1970-1-1
|
- class Solution {
- // 第一题 给一个全是int的array A,可以选择从array的任何一个index开始跳往后跳。
- // 记当前是第i次jump,如果i是奇数,需要跳到后面所有比当前数字大的数字中最小的一个的位置,如果i是偶数,就要跳到所有比当前数字小的中,数字最大的一个的位置。
- // 求输出整个array中能跳到最后一位的数字有几个。
- // 比如说[10,13,12,14,15], 只有14可以跳到15(第1次跳,是奇数,14后面只有15,且15>14,到达),以及15本身就在最后,所以输出2.
- int num = 0;
- public int findAll(int[] input) {
- for(int i=0;i<input.length;i++){
- findNumberOfJumps(input, i, i, true);
- }
- return num;
- }
- public void findNumberOfJumps(int[] input, int pivotIndex, int currIndex, boolean isOdd) {
- if(currIndex >= input.length){
- return;
- }
- if(currIndex==input.length-1){
- num++;
- return;
- }
- int index;
- if(isOdd){
- index = findSmallestOfLarge(input, pivotIndex, currIndex);
- }else{
- index = findLargestOfSmall(input, pivotIndex, currIndex);
- }
- if(index==-1){
- return;
- }
- findNumberOfJumps(input, pivotIndex, index, !isOdd);
- }
- public int findSmallestOfLarge(int[] arr, int pivotIndex, int currIndex) {
- int result = arr[pivotIndex];
- int index = 0;
- for(int i = currIndex+1; i<arr.length; i++) {
- int elem = arr[i];
- if(i == currIndex+1 && elem > result) {
- result = elem;
- index = i;
- continue;
- }
- if(elem > arr[pivotIndex] && elem < result){
- result = elem;
- index = 1;
- }
- }
- return result == arr[pivotIndex] ? - 1 : index;
- }
- public int findLargestOfSmall(int[] arr, int pivotIndex, int currIndex) {
- int result = arr[pivotIndex];
- int index = 0;
- for(int i = currIndex+1; i<arr.length; i++) {
- int elem = arr[i];
- if(i == currIndex+1 && elem < result) {
- result = elem;
- index = i;
- continue;
- }
- if(elem < arr[pivotIndex] && elem > result){
- result = elem;
- index = i;
- }
- }
- return result == arr[pivotIndex] ? - 1 : index;
- }
- }
复制代码
补充内容 (2018-12-9 04:40):
随手写了一下,求大神们指点。。。
补充内容 (2018-12-9 04:41):
应该还有特别简单的方法,求大神po下~ |
|