मुझे लगता है कि वहां एक गुस्सा है। मैं अंक के लिए ऐसा नहीं करता हूं। मैं ऐसा इसलिए करता हूं क्योंकि मैं इसका आनंद लेता हूं। मैंने आपको बहुत कुछ दिया और सोचा कि आप अपने आप को आगे बढ़ाने में सक्षम होंगे। वैसे भी, यह एक ऐसा स्थान है जहां पूर्ण अजनबी अजनबियों को पूरा करने में मदद करते हैं। यह एक समाधान नहीं है:
यहाँ एक कोड है, तो निम्न परीक्षणों के परिणामों के साथ:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ResolvingAlgo {
public static Character[] resolver(Character[] objects, int R) {
//calculate frequency of each element
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (Character c : objects) {
Integer freq = map.get(c);
map.put(c, (freq == null) ? 1 : freq + 1);
}
//count elements with frequency R
List<Character> pillars = new ArrayList<Character>();
for (Character c : map.keySet()) {
int freq = map.get(c);
if (R == freq) {
pillars.add(c);
} else if (objects.length/R < freq) {
return null;
}
}
//output array
Character output[] = new Character[objects.length];
//load the pillars R+1 apart
int skip = (pillars.size()<R)?R:R+1;
for (Character c : pillars) {
int index = 0;
for (int out=index; out<output.length; out++) {
if (output[out] == null) {
break;
}
index++;
}
for (int i = R; i > 0; i--) {
output[index] = c;
index += skip;
}
map.remove(c);
}//pillars
//add remainders
while (!map.isEmpty()) {
int index = 0;
Character keyset[] = Arrays.copyOf(map.keySet().toArray(new Character[0]), map.size());
for (Character c : keyset) {
for (int out = index; out < output.length; out++) {
if (null == output[out]) {
break;
}
index++;
}
output[index] = c;
int freq = map.get(c);
if (freq <= 1) {
map.remove(c);
} else {
map.put(c, freq - 1);
}
}//for keyset
}//while
return output;
}//resolver
public static void main(String... args) {
Character[][] input = {
{'a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'},
{'a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'k'},
{'a', 'a', 'a', 'b', 'c', 'd', 'd', 'd', 'k'},
{'a', 'b', 'd', 'c', 'a', 'd', 'k', 'a', 'd', 'a', 'a'},
{'a', 'a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd'},
{'a', 'b', 'c', 'd', 'e', 'f', 'a', 'b', 'c', 'd', 'e', 'f'},
{'a','b','c','d','a','b','c','d'}
};
for(Character in[]: input)
System.out.println(Arrays.toString(resolver(in, 3)));
}
}
परीक्षण के परिणाम:
[d, b, c, a, d, b, c, a, d, b, c, a]
[b, c, a, d, b, c, a, k, b, c, a, d]
[d, a, b, d, a, c, d, a, k]
null
[b, c, d, b, c, a, b, c, d, a, a, a]
[f, d, e, b, c, a, f, d, e, b, c, a]
[d, b, c, a, d, b, c, a]
@ EvgenyKluev- जबकि मैं मानता हूँ कि अपनी हालत, वहाँ के लिए कोई आदेश होने के लिए पर्याप्त है यह आवश्यक है? साथ ही, क्या आप मौजूद होने पर ऑर्डर देने के लिए अपने दृष्टिकोण का उपयोग कर सकते हैं? – templatetypedef
@ EvgenyKluev- मुझे यकीन नहीं है कि मैं समझता हूं कि आपका क्या मतलब है। मैं नहीं देखता कि सरणी कैसे सॉर्ट कर सकती है जब एक होता है, और न ही मैं देखता हूं कि क्यों सरणी को सॉर्ट करना और यह नोट करना कि तत्व की बहुत सारी प्रतियां नहीं हैं, यह गारंटी देता है कि व्यवस्था करने का एक तरीका है अवयव। क्या आप विस्तार से समझा सकते हैं? – templatetypedef
@templatetypedef, मैंने सवाल को गलत समझा। माफ़ कीजिये। –