Finding closest number in an array

前端 未结 11 906
萌比男神i
萌比男神i 2021-01-31 22:10

In an array first we have to find whether a desired number exists in that or not? If not then how will I find nearer number to the given desired number in Java?

相关标签:
11条回答
  • 2021-01-31 22:32

    An idea:

    int nearest = -1;
    int bestDistanceFoundYet = Integer.MAX_INTEGER;
    // We iterate on the array...
    for (int i = 0; i < array.length; i++) {
      // if we found the desired number, we return it.
      if (array[i] == desiredNumber) {
        return array[i];
      } else {
        // else, we consider the difference between the desired number and the current number in the array.
        int d = Math.abs(desiredNumber - array[i]);
        if (d < bestDistanceFoundYet) {
          // For the moment, this value is the nearest to the desired number...
          bestDistanceFoundYet = d; // Assign new best distance...
          nearest = array[i];
        }
      }
    }
    return nearest;
    
    0 讨论(0)
  • 2021-01-31 22:34

    Pseudocode to return list of closest integers.

    myList = new ArrayList();          
    
    if(array.length==0) return myList; 
    
    myList.add(array[0]);
    
    int closestDifference = abs(array[0]-numberToFind);
    
    for (int i = 1; i < array.length; i++) {
    
     int currentDifference= abs(array[i]-numberToFind);
    
      if (currentDifference < closestDifference) {
    
        myList.clear();
    
        myList.add(array[i]);
    
             closestDifference = currentDifference;
    
      } else {
    
        if(currentDifference==closestDifference) {
    
            if( myList.get(0) !=array[i]) && (myList.size() < 2) {
    
                myList.add(array[i]);
    
            }
                }
    
           }
    
    }
    
    return myList;
    
    0 讨论(0)
  • 2021-01-31 22:41

    Only thing missing is the semantics of closer.

    What do you do if you're looking for six and your array has both four and eight?

    Which one is closest?

    0 讨论(0)
  • 2021-01-31 22:45

    If the array is sorted, then do a modified binary search. Basically if you do not find the number, then at the end of search return the lower bound.

    0 讨论(0)
  • 2021-01-31 22:45

    Array.indexOf() to find out wheter element exists or not. If it does not, iterate over an array and maintain a variable which holds absolute value of difference between the desired and i-th element. Return element with least absolute difference.

    Overall complexity is O(2n), which can be further reduced to a single iteration over an array (that'd be O(n)). Won't make much difference though.

    0 讨论(0)
  • 2021-01-31 22:45
    // paulmurray's answer to your question is really the best :
    
    // The least square solution is way more elegant, 
    // here is a test code where numbertoLookFor
    // is zero, if you want to try ...
    
    import java.util.* ;
    
    public class main {
        public static void main(String[] args) 
        {
            int[] somenumbers = {-2,3,6,1,5,5,-1} ;
            ArrayList<Integer> l = new ArrayList<Integer>(10) ;
            for(int i=0 ; i<somenumbers.length ; i++)
            {
                l.add(somenumbers[i]) ;
            }
            Collections.sort(l, 
                    new java.util.Comparator<Integer>()
                    {
                        public int compare(Integer n1, Integer n2)
                        {
                            return n1*n1 - n2*n2 ;
                        }
                    }
            ) ;
            Integer first = l.get(0) ;
            System.out.println("nearest number is " + first) ;  
        }
    }
    
    0 讨论(0)
提交回复
热议问题