public class IncrementSybmols {
public static void main(String[] args) throws Throwable {
List<Integer> syms = Arrays.asList(1,2,3,4,5);
test(syms, 3, Arrays.asList(1,2,3), Arrays.asList(1,2,4));
test(syms, 3, Arrays.asList(2,5,4), Arrays.asList(3,1,2));
test(syms, 3, Arrays.asList(4,3,5), Arrays.asList(4,5,1));
test(syms, 3, Arrays.asList(5,4,2), Arrays.asList(5,4,3));
test(syms, 3, Arrays.asList(5,4,3), null);
}
private static void test(List<Integer> syms, int n, List<Integer> in, List<Integer> exp) {
List<Integer> out = increment(syms, n, in);
System.out.println(in+" -> "+out+": "+(exp==out || exp.equals(out)?"OK":"FAIL"));
}
private static List<Integer> increment(List<Integer> allSyms, int n, List<Integer> in){
TreeSet<Integer> availableSym = new TreeSet<Integer>(allSyms);
availableSym.removeAll(in);
LinkedList<Integer> current = new LinkedList<Integer>(in);
// Remove symbols beginning from the tail until a better/greater symbols is available.
while(!current.isEmpty()){
Integer last = current.removeLast();
availableSym.add(last);
// look for greater symbols
Integer next = availableSym.higher(last);
if(next != null){
// if there is a greater symbols, append it
current.add(next);
availableSym.remove(next);
break;
}
}
// if there no greater symbol, then *shrug* there is no greater number
if(current.isEmpty())
return null;
// fill up with smallest symbols again
while(current.size() < n){
Integer next = availableSym.first();
availableSym.remove(next);
current.add(next);
}
return current;
}
}
अच्छे साक्षात्कारकर्ता बता सकते हैं कि क्या इन चीजों के लिए डिब्बाबंद प्रतिक्रिया है या नहीं। अगर आपको इसे काम करना है तो वे इसे बेहतर पसंद करते हैं, क्योंकि वे आपकी समस्या सुलझाने की प्रक्रिया देख सकते हैं, जो समाधान को जानने से ज्यादा महत्वपूर्ण है। – Almo
मैंने इस तरह का समाधान दिया, उपलब्ध संख्याओं की एक क्रमबद्ध डबल एंडेड कतार लें, उपलब्ध संख्याओं के साथ शुरू करें, 1. इकाइयों के अंकों से शुरू करें, यदि उच्च संख्या उपलब्ध है, तो जांचें, यदि अन्यथा प्रतिस्थापित करें, तो इस नंबर को उपलब्ध सूची में रखें और दस अंकों के अंकों की जांच करें 2. यदि आपको वर्तमान अंक से अधिक संख्या मिलती है तो इसे प्रतिस्थापित करें, और कतार से छोटी संख्या डालने शुरू करें। क्या इसे और अधिक कुशल बनाया जा सकता है और क्या कोई त्रुटियां हैं? –
उदाहरण .. {{{ 123 उपलब्ध: 45 जांच 3 .. 254 उपलब्ध के लिए 4 के साथ बदलें: 13 जांच 4 .. 1,3 <4 उपलब्ध जांच 5 में 4 डाल .. उपलब्ध नहीं जांच 2 .. उपलब्ध: 1345 उपलब्ध 2 में सम्मिलित करें, 3 के साथ प्रतिस्थापित करें, 1 और 2 }}} –