锁定老帖子 主题:JMS接收消息实例
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-23
第1题:
@Test public void test2() { String s = "DBCA"; sort(s); } public static void sort(String str) { char [] chars = str.toCharArray(); Arrays.sort(chars); for(int i = 0; i < chars.length; i ++) { System.out.println(chars[i]); } } 匆忙之作,见丑! |
|
返回顶楼 | |
发表时间:2008-10-23
6246850 写道 pure 写道 第一个题用集合并实现排序接口不可以么?
应该可以的,用冒炮排序应该更好点! 冒泡效率太低了吧,特别是大数据的时候,还是快速排序或者堆排序比较好 |
|
返回顶楼 | |
发表时间:2008-10-23
supercrsky 写道 第1题:
@Test public void test2() { String s = "DBCA"; sort(s); } public static void sort(String str) { char [] chars = str.toCharArray(); Arrays.sort(chars); for(int i = 0; i < chars.length; i ++) { System.out.println(chars[i]); } } 匆忙之作,见丑! 我觉得应该是考基础的算法,而不是用JAVA API去排序。。。。。。。。 用Arrays.sort(chars); 出这个题还有意义吗? |
|
返回顶楼 | |
发表时间:2008-10-23
// 1.字符串数组排序 // 达到效果:'A','B','C' String[] array = new String[26]; java.util.Random rand = new java.util.Random(); java.util.Set<String> set = new java.util.HashSet<String>(); while (true) { set.add((char) (rand.nextInt(26) + 65) + ""); if (set.size() == 26) { break; } } set.toArray(array); for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } String t = null; for (int i = 0; i < array.length - 1; i++) { for (int j = 0; j < array.length - i - 1; j++) { if (array[j].compareTo(array[j + 1]) > 0) { t = array[j]; array[j] = array[j + 1]; array[j + 1] = t; } } } System.out.println("\n--------------------"); for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } // 2.wo jiao shenzhen // 字母出现的次数。 // 如:a(2)j(1) String str = "wo jiao shenzhen"; java.util.Map<String, Integer> map = new java.util.LinkedHashMap<String, Integer>(); for (int i = 0; i < str.length(); i++) { if (map.containsKey(str.charAt(i) + "")) { map.put(str.charAt(i) + "", Integer.parseInt(map.get(str.charAt(i) + "") + "") + 1); } else { map.put(str.charAt(i) + "", 1); } } System.out.println("\n--------------------"); java.util.Iterator<String> iterator2 = map.keySet().iterator(); while (iterator2.hasNext()) { String key = iterator2.next(); String value = map.get(key) + ""; System.out.print(key + "(" + value + ")"); } 下面的方法应该更快。 supercrsky 写道 第2题:
public static void count(String str) { // 用于存储a-z出现的次数 int[] nums = new int[26]; for (char i : str.toCharArray()) { // 在字母的范围内 if (i >= 97 && i <= 123) { nums[i - 97]++; } } for (int i = 0; i < nums.length; i++) { // 只显示出现的 if (nums[i] != 0) { System.out.println((char) (97 + i) + ":" + nums[i]); } } } |
|
返回顶楼 | |
发表时间:2008-10-24
dongivan 的方法不错,有创意
之前没想到这点 |
|
返回顶楼 | |
发表时间:2008-10-24
看看这个,第二题
public static void main(String[] args) { String s = "wo jiao shenzhen "; char[] chars = s.toCharArray(); char[] chars1 = null; Arrays.sort(chars); for (int i = 0; i < chars.length; i++) { if (chars[i] != ' ') { chars1 = new char[chars.length - i]; System.arraycopy(chars, i, chars1, 0, chars1.length); break; } } for (int i = 0, j = 1; i < chars1.length; i++) { char a = chars1[i]; if (i != chars1.length - 1 && chars1[i + 1] != a) { System.out.println(a + "(" + j + ")"); j = 1; } else { j++; } } } |
|
返回顶楼 | |
发表时间:2008-10-24
malk 写道 看看这个,第二题
public static void main(String[] args) { String s = "wo jiao shenzhen "; char[] chars = s.toCharArray(); char[] chars1 = null; Arrays.sort(chars); for (int i = 0; i < chars.length; i++) { if (chars[i] != ' ') { chars1 = new char[chars.length - i]; System.arraycopy(chars, i, chars1, 0, chars1.length); break; } } for (int i = 0, j = 1; i < chars1.length; i++) { char a = chars1[i]; if (i != chars1.length - 1 && chars1[i + 1] != a) { System.out.println(a + "(" + j + ")"); j = 1; } else { j++; } } } 看了顿时了解为啥下岗了。 想过你的array.sort的时间复杂度么? |
|
返回顶楼 | |
发表时间:2008-10-24
楼上是意思是不是这样?
public static void main(String[] args) { String s = "wo jiao shenzhen "; char[] chars = s.toCharArray(); char[] chars1 = null; //排序 for (int i = 0; i < chars.length; ++i) { char temp; for (int j = 0; j < chars.length - i - 1; ++j) { if (chars[j] > chars[j + 1]) { temp = chars[j]; chars[j] = chars[j + 1]; chars[j + 1] = temp; } } } //去除空格 for (int i = 0; i < chars.length; i++) { if (chars[i] != ' ') { chars1 = new char[chars.length - i]; System.arraycopy(chars, i, chars1, 0, chars1.length); break; } } //计数 for (int i = 0, j = 1; i < chars1.length; i++) { char a = chars1[i]; if (i != chars1.length - 1 && chars1[i + 1] != a) { System.out.println(a + "(" + j + ")"); j = 1; } else { j++; } } } |
|
返回顶楼 | |
发表时间:2008-10-24
恭喜你,你成功的吧O(nlogn)的时间复杂度提高到O(n^2)
把quicksort变成了bubblesort,你再想想,这个东西需要排序么? |
|
返回顶楼 | |
发表时间:2008-10-24
javaboy2006 写道 下面的方法应该更快。 supercrsky 写道 第2题:
public static void count(String str) { // 用于存储a-z出现的次数 int[] nums = new int[26]; for (char i : str.toCharArray()) { // 在字母的范围内 if (i >= 97 && i <= 123) { nums[i - 97]++; } } for (int i = 0; i < nums.length; i++) { // 只显示出现的 if (nums[i] != 0) { System.out.println((char) (97 + i) + ":" + nums[i]); } } } 我到是觉得这个只看第二题来说效率最高,只不过是有大写字母和其他字符就不好办了,如果排序的话也就顺便把第一题也做了 |
|
返回顶楼 | |