2018/9/20小米内推笔试编程题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiao__jia__jia/article/details/82799709

                                    2018/9/20小米内推笔试编程题 

下面代买是昨晚笔试时只过50%的数据,感觉应该是输出的异数的顺序段发生变化了。
 



import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

	public class Main {
	
    public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		Map<Integer, Node2> map =  new HashMap<Integer, Node2>();
		String temp = in.nextLine();
		int a = 0;
		int b = 0;
		while(!temp.equals("END")){
			String str[] = temp.split("#");
			a = Integer.parseInt(str[0]);
			Integer aa = Integer.valueOf(str[1], a);
			if(!map.containsKey(aa)){	
				map.put(aa, new Node2(temp, 1));
			}else{
				Node2 no = (Node2)map.get(aa);
				map.put(aa, new Node2(no.a,no.b+1 ));
			}
			temp = in.nextLine();
		}
		boolean  check = false;
		Set<Integer> set =   map.keySet();
		
			Iterator<Integer> iterator  = set.iterator();
			while(iterator.hasNext()){
				Integer aaa =iterator.next();
				if(map.get(aaa).b == 1){
					check = true;
					System.out.println(map.get(aaa).a);
				}
			}
			if(!check){
				System.out.println("None");
			}
	
		
	}
}
	class Node2{
		String a;
		int b;
		public Node2(String a, int b){
			this.a = a;
			this.b = b;
		}
	}


 

 

第二道完全没有思路,听说leetcode的42题的进化版。
 

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Main1 {


/*请完成下面这个函数,实现题目要求的功能
当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^ 
******************************开始写代码******************************/
    static int findMaxCapacity(int[] array, int m) {

          return 12;
    }
/******************************结束写代码******************************/


    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int res;
            
        int _array_size = 0;
        _array_size = Integer.parseInt(in.nextLine().trim());
        int[] _array = new int[_array_size];
        int _array_item;
        for(int _array_i = 0; _array_i < _array_size; _array_i++) {
            _array_item = Integer.parseInt(in.nextLine().trim());
            _array[_array_i] = _array_item;
        }
        
        int _m;
        _m = Integer.parseInt(in.nextLine().trim());
  
        res = findMaxCapacity(_array, _m);
        System.out.println(String.valueOf(res));    

    }
}



先看下leetcode的42题
42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。

示例:

输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6
题解:题目不难,观察下就可以发现被水填满后的形状是先升后降的塔形,因此,先遍历一遍找到塔顶,然后分别从两边开始,往塔顶所在位置遍历,水位只会增高不会减小,且一直和最近遇到的最大高度持平,这样知道了实时水位,就可以边遍历边计算面积。
class Solution {
public:
    int trap(int A[], int n) {
        if(n <= 2) return 0;
        int max = -1, maxInd = 0;
        int i = 0;
        for(; i < n; ++i){
            if(A[i] > max){
                max = A[i];
                maxInd = i;
            }
        }
        int area = 0, root = A[0];
        for(i = 0; i < maxInd; ++i){
            if(root < A[i]) root = A[i];
            else area += (root - A[i]);
        }
        for(i = n-1, root = A[n-1]; i > maxInd; --i){
            if(root < A[i]) root = A[i];
            else area += (root - A[i]);
        }
        return area;
    }
};

猜你喜欢

转载自blog.csdn.net/xiao__jia__jia/article/details/82799709