Weekly Contest 142

又是两道题目,感觉rank要掉了呀~ 第一道看错题目了,然后浪费了很长时间,第三道很简单,思路也有,但是没时间了。

1093. Statistics from a Large Sample

We sampled integers between0and255, and stored the results in an arraycount:count[k]is the number of integers we sampled equal tok.

Return the minimum, maximum, mean, median, and mode of the sample respectively, as an array of floating point numbers.  The mode is guaranteed to be unique.

(Recall that the median of a sample is:

  • The middle element, if the elements of the sample were sorted and the number of elements is odd;
  • The average of the middle two elements, if the elements of the sample were sorted and the number of elements is even.)


Example 1:

Input: count = [0,1,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
Output: [1.00000,3.00000,2.37500,2.50000,3.00000]

Example 2:

Input: count = [0,4,3,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
Output: [1.00000,4.00000,2.18182,2.00000,1.00000]


Constraints:

  1. count.length == 256
  2. 1 <= sum(count) <= 10^9
  3. The mode of the sample that count represents is unique.
  4. Answers within10^-5of the true value will be accepted as correct.

题目大意:给你一个长度为256的数组count,count[i]代表i出现的次数,求最小值,最大值,平均值,中位数和众数,然后依次添加到一个double数组中返回。

题目思路:基本上看清题目还有理解这些数学值怎么求,基本上不会错。

代码:

class Solution { public double[] sampleStats(int[] count) { int len = 0; double[] res = new double[5]; double sum = 0; double minNum = Integer.MAX_VALUE; double maxNum = Integer.MIN_VALUE; double meanNum = 0.0; double modeNum = 0.0; int modeCount = 0; for(int i=0; i<256; i++) {
            len += count[i]; if( count[i]!=0 ) {
                maxNum = i;
                sum += ( count[i] * i ); if( count[i]>modeCount ) {
                    modeCount = count[i];
                    modeNum = i;
                }
            } if( count[i]!=0 && minNum==Integer.MAX_VALUE ) minNum = i;
        } int cnt = 0; boolean flag = false; for(int i=0; i<256; i++) {
            cnt += count[i]; if( cnt >= len/2 && flag == false ) {
                meanNum += i;
                flag = true; if( len%2 == 1 ) break;
            } if( cnt >= len/2+1 ) {
                meanNum += i;
                meanNum /= 2; break;
            }
            
        }
        res[0] = minNum;
        res[1] = maxNum;
        res[2] = (double) sum/len;
        res[3] = meanNum;
        res[4] = modeNum; return res;
    }
}
View Code

1094. Car Pooling

You are driving a vehicle that hascapacityempty seats initially available for passengers.  The vehicle only drives east (ie. it cannot turn around and drive west.)

Given a list oftrips,trip[i] = [num_passengers, start_location, end_location]contains information about thei-th trip: the number of passengers that must be picked up, and the locations to pick them up and drop them off.  The locations are given as the number of kilometers due east from your vehicle's initial location.

Returntrueif and only if it is possible to pick up and drop off all passengers for all the given trips.


Example 1:

Input: trips = [[2,1,5],[3,3,7]], capacity = 4 Output: false 

Example 2:

Input: trips = [[2,1,5],[3,3,7]], capacity = 5 Output: true 

Example 3:

Input: trips = [[2,1,5],[3,5,7]], capacity = 3 Output: true 

Example 4:

Input: trips = [[3,2,7],[3,7,9],[8,3,9]], capacity = 11 Output: true 


Constraints:

  1. trips.length <= 1000
  2. trips[i].length == 3
  3. 1 <= trips[i][0] <= 100
  4. 0 <= trips[i][1] < trips[i][2] <= 1000
  5. 1 <= capacity <= 100000

题目大意:只能一个方向行驶的汽车中,给你一个上下车的数组和一个汽车容量,让你求汽车可不可以将所有人都运到想要到达的地方。

题目思路:先按照起点排序,然后用一个map记录下车点对应的人数,然后直接遍历,先下车然后上车。之前看题目的The locations are given as the number of kilometers due east from your vehicle's initial location.这句话,我以为是已经排好序了,然后wa了一次。

代码:
class Solution { public boolean carPooling(int[][] trips, int capacity) { int len = trips.length; int num = 0;
        Arrays.sort(trips, new Comparator<Object>() { public int compare(Object oObjectA, Object oObjectB) { int[] arTempOne = (int[])oObjectA; int[] arTempTwo = (int[])oObjectB; if (arTempOne[1] > arTempTwo[1]) { return 1;  
                } else if (arTempOne[1] < arTempTwo[1]){ return -1;
                } return 0;  
            }
           });
        Map<Integer, Integer> map = new HashMap<>(); int last = 0; for(int i=0; i<len; i++) { int num_passengers = trips[i][0]; int start_location = trips[i][1]; int end_location = trips[i][2]; for(int j=last; j<=start_location; j++ ) {
                Integer tem = map.get(j); if( tem != null ) {
                    num -= tem;
                }
            }
            last = start_location+1;
            Integer sum = map.get(end_location); if( sum == null ) {
                sum = num_passengers;
            } else sum += num_passengers;
            map.put(end_location, sum);
            num += num_passengers; if( num > capacity ) return false;
        } return true;
    }
}
View Code

1095. Find in Mountain Array

(This problem is an interactive problem.)

You may recall that an arrayAis a mountain array if and only if:

  • A.length >= 3
  • There exists someiwith0 < i < A.length - 1such that:
    • A[0] < A[1] < ... A[i-1] < A[i]
    • A[i] > A[i+1] > ... > A[A.length - 1]

Given a mountain arraymountainArr, return the minimumindexsuch thatmountainArr.get(index) == target.  If such anindexdoesn't exist, return-1.

You can't access the mountain array directly.  You may only access the array using aMountainArrayinterface:

  • MountainArray.get(k)returns the element of the array at indexk(0-indexed).
  • MountainArray.length()returns the length of the array.

Submissions making more than100calls toMountainArray.getwill be judged Wrong Answer.  Also, any solutions that attempt to circumvent the judge will result in disqualification.


Example 1:

Input: array = [1,2,3,4,5,3,1], target = 3
Output: 2
Explanation: 3 exists in the array, at index=2 and index=5. Return the minimum index, which is 2.

Example 2:

Input: array = [0,1,2,4,2,1], target = 3
Output: -1
Explanation: 3 does not exist inthe array,so we return -1.


Constraints:

  1. 3 <= mountain_arr.length() <= 10000
  2. 0 <= target <= 10^9
  3. 0 <= mountain_arr.get(index) <= 10^9

题目大意:山数组,顾名思义像山一样有一个极大值。给你一个山数组和一个目标值target,求在山数组中等于目标值的下标,如果有多个等于目标值的下标,返回最小的。注意山数组取值只能通过mountain_arr.get(index)方法,而使用这个方法超过100次就会被判错。

题目思路:看完题目就知道是二分了,可惜没时间了。用二分找到极大值的下标,然后二分找左边和右边。

代码:

/** * // This is MountainArray's API interface.
 * // You should not implement it, or speculate about its implementation
 * interface MountainArray {
 *     public int get(int index) {}
 *     public int length() {}
 * } */ class Solution { public int findInMountainArray(int target, MountainArray mountainArr) { int n = mountainArr.length(); int top = -1; // 找顶点  { int low = 0, high = n; while(high - low > 1){ int h = high+low-1>>1; if(mountainArr.get(h) < mountainArr.get(h+1)){
                        low = h+1;
                    }else{
                        high = h+1;
                    }
                }
                top = low;
            } if(mountainArr.get(top) == target)return top; // 找左边  { int low = 0, high = top+1; while(high - low > 0){ int h = high+low>>1; int v = mountainArr.get(h); if(v == target)return h; if(v < target){
                        low = h+1;
                    }else{
                        high = h;
                    }
                }
            } // 找右边  { int low = top, high = n; while(high - low > 0){ int h = high+low>>1; int v = mountainArr.get(h); if(v == target)return h; if(v > target){
                        low = h+1;
                    }else{
                        high = h;
                    }
                }
            } return -1;
        }
    } 
View Code


全部评论

相关推荐

不愿透露姓名的神秘牛友
11-27 10:46
点赞 评论 收藏
分享
一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:52
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务