LeetCode-496. Next Greater Element I (java)

You are given two arrays (without duplicates)  nums1  and  nums2  where  nums1 ’s elements are subset of  nums2 . Find all the next greater numbers for  nums1 's elements in the corresponding places of  nums2 .
The Next Greater Number of a number x in  nums1  is the first greater number to its right in  nums2 . If it does not exist, output -1 for this number.
Example 1:
Input: nums1 = [4,1,2], nums2 = [1,3,4,2].
Output: [-1,3,-1]
Explanation:
    For number 4 in the first array, you cannot find the next greater number for it in the second array, so output -1.
    For number 1 in the first array, the next greater number for it in the second array is 3.
    For number 2 in the first array, there is no next greater number for it in the second array, so output -1.

Example 2:
Input: nums1 = [2,4], nums2 = [1,2,3,4].
Output: [3,-1]
Explanation:
    For number 2 in the first array, the next greater number for it in the second array is 3.
    For number 4 in the first array, there is no next greater number for it in the second array, so output -1.

Note:
  • All elements in  nums1  and  nums2  are unique.
  • The length of both  nums1  and  nums2  would not exceed 1000.

  • ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    제목
    이 문 제 는 nums 1 의 값 에 따라 nums 2 의 해당 위치 오른쪽 부터 nums 1 자체 의 값 보다 크다 는 뜻 이다.
    사고의 방향
    나의 생각 에 따 르 면 세 단계 가 있다.
    1. 부분 집합 배열 nums 1 옮 겨 다 니 기
    2. nums 1 의 값 이 nums 2 에 있 는 위 치 를 찾 습 니 다.
    3. 찾 은 위치 부터 오른쪽으로 옮 겨 다 니 며 그 보다 큰 값 찾기
    코드
    이 세 단계 에 따 르 면 제 코드 는 다음 과 같 습 니 다. 18ms 가 걸 립 니 다.
    public class Solution {
        public int[] nextGreaterElement(int[] findNums, int[] nums) {
            int [] result = new int[findNums.length];
    	int z=0;
    	for(int i=0;i findNums[i]){
    				result[z]= nums[j];
    				break;
    			}else{
    				result[z] = -1;
    			}
    		}
    		z++;
    	}
    	return result;
        }
        //      
        public static int SearchIndex(int numElement,int[] nums){
    	int index=0;
    	for(int i=0;i
     
      
    3ms , :
    public class Solution {
        public int[] nextGreaterElement(int[] findNums, int[] nums) {
            if (nums == null || nums.length == 0) {
                return new int[]{};
            }
            int Length = nums.length;
            int findLength = findNums.length;
            int[] Final = new int[findLength];
            int max = nums[0];
    	    //  nums     
            for (int i = 1; i < Length; i++) {
                if (nums[i] > max) {
                    max = nums[i];
                }
            }
            int[] Indexer = new int[max + 1];
            for (int i = 0; i < Length; i++) {
    	    //        ,          ,         ,
            //                   ,         ,    findNums
    	    //      ,        ,    。       
                Indexer[nums[i]] = i;
            }
            boolean Found = false;
            int cur, curindex;
            for (int i = 0; i < findLength; i++) {
                Found = false;
                cur = findNums[i];
    	        //          
                curindex = Indexer[cur] + 1;
    	        //    -1
                Final[i] = -1;
        	    //           ,      ,     ,          ,    
                if (cur != max) {
    	           	//        cur  ,      , Found    
                    while (curindex < Length && Found != true) {
                        if (nums[curindex] > cur) {
                            Found = true;
                            Final[i] = nums[curindex];
                        }
                        curindex++;
                    }
                }
            }
            return Final;
        }
    }
    

    , , , , LeetCode-561 Array Partition I , 。


    좋은 웹페이지 즐겨찾기