62,614
社区成员
发帖
与我相关
我的任务
分享
@Test
public void questoin() {
int[] ia = { 3, 11, 12 };
String[] strings = new String[ia.length];
// 把int数组转成String数组,方便比较和排序
for (int i = 0; i < ia.length; i++) {
strings[i] = String.valueOf(ia[i]);
}
// 排序
Arrays.sort(strings);
// 先拼成字符串
StringBuilder sb = new StringBuilder();
for (int i = 0; i < strings.length; i++) {
sb.append(strings[i]);
}
// 按题目要求转成整型
int result = new Integer(sb.toString());
System.out.println("最小的权重值:" + result);
}
[/align]
/**
*
* @author shizongger
* 并归排序
*/
public class MergeSort {
public static void main(String[] args) {
int[] array = {100, 86, 11, 100, 8, 6};
mergeSort(array);
for(int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
//归并排序
public static void mergeSort(int[] arr){
int[] temp =new int[arr.length];
internalMergeSort(arr, temp, 0, arr.length-1);
}
private static void internalMergeSort(int[] a, int[] b, int left, int right){
int mid = (left+right)/2;
if(left < right) {
internalMergeSort(a, b, left, mid);
internalMergeSort(a, b, mid+1, right);
mergeSortedArray(a, b, left, mid, right);
}
}
// 合并两个有序子序列 arr[left, ..., middle] 和 arr[middle+1, ..., right]。temp是辅助数组。
private static void mergeSortedArray(int arr[], int temp[], int left, int middle, int right){
int leftIndex = left;
int rightIndex = middle+1;
int index = 0;
while(leftIndex <= middle && rightIndex <= right) {
if(arr[leftIndex] <= arr[rightIndex]) {
temp[index++] = arr[leftIndex++];
} else {
temp[index++] = arr[rightIndex++];
}
}
while(leftIndex <= middle) {
temp[index++] = arr[leftIndex++];
}
while(rightIndex <= right) {
temp[index++] = arr[rightIndex++];
}
//将temp的值复制到arr
for(int i = 0; i < index; i++) {
arr[left+i] = temp[i];
}
}
}
public static void main(String[] args) {
String s = "helloworld";
Set<Character> set = new HashSet<>();
for (char c : s.toCharArray()) {
if (set.contains(c)) {
System.out.println(c);
break;
}
set.add(c);
}
int[] a = new int[] {3, 11, 12};
System.out.println(Arrays.stream(a).mapToObj(String::valueOf).sorted().collect(Collectors.joining()));
}
路过一下.. 不知道你要问什么.. 这是笔试吗 笔试感觉有点坑呀... 不知道第一题的考点是什么,得出结果就可以吗? 不过题目简单看起来也不会有效率问题... 当然我感觉第一思路还是toCharArray()然后双重循环.. 第二题有点小麻烦... 比如 154 和 129 放在一起, 还是129在前面划算一些. 其实应该是先按照字符串的方式来比较一下吧,逐位比较,排序...考点应该是重写比较器吧.. 第三题,好麻烦. 不想看..反正我没去面试 面试题.. 除虫你说用Set吗.. 看起来和笔试第一题一样 那就用Set吧.. 要不然也是n^2...(反正List的contains复杂度应该也是n)
什么公司面试这么麻烦
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.print("输入字符串:");
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
for(int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if(hm.get(c) != null) {
hm.put(c, hm.get(c) + 1);
if(hm.get(c) == 2) {
System.out.println(c + "在字符串中第一次出现两次");
break;
}
} else {
hm.put(c, new Integer(1));
}
}
}
}
第3题,解题思路。http://blog.csdn.net/zhang5476499/article/details/48831509
public class BinarySearch {
public static int bSearch(int[] arr, int target) {
int i = -1;
int left = 0;
int right = arr.length-1;
while(left <= right) {
int mid = (left+right)/2;
if(arr[mid] < target) {
left = mid+1;
} else if(arr[mid] > target) {
right = mid-1;
} else {
return mid;
}
}
return i;
}
public static int bSearch1(int[] arr, int target, int left, int right) {
int index = -1;
if(left <= right) {
int mid = (left+right)/2;
if(arr[mid] > target) {
index = bSearch1(arr, target,left, mid-1);
} else if(arr[mid] < target) {
index = bSearch1(arr, target, mid+1, right);
} else {
return mid;
}
}
return index;
}
public static void main(String[] args) {
int[] arr = {1, 3, 13, 17, 21, 128};
int target = 2;
int index = bSearch(arr, target);
System.out.println(target + "在数组的下标:" + index);
int index1 = bSearch1(arr, target, 0, arr.length-1);
System.out.println(target + "在数组的下标:" + index1);
}
}
出重,当时想不出来,都是自己太low了,其实就是把List的值放进Set里面就行了,基本数据类型自动去重。
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(0);
list.add(0);
list.add(8);
list.add(6);
System.out.println(list);
Set<Integer> set = new HashSet<Integer>();
set.addAll(list);
System.out.println(set);
}
如果是对象,需要对我们的JavaBean重写equals()方法和hashCode()方法。
Person.java
public class Person {
private int age;
private String name;
private boolean sex;
public Person(int age, String name, boolean sex) {
this.age = age;
this.name = name;
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Person) {
Person stu = (Person)obj;
return stu.age == this.age && stu.name == this.name && stu.sex == this.sex;
}
return false;
}
@Override
public String toString() {
return "[name:" + this.name + ",age:" + this.age + ",sex:" + this.sex + "]";
}
@Override
public int hashCode() {
String in = name + age + sex;
return in.hashCode();
}
}
main方法
public static void main(String[] args) {
Person p1 = new Person(20, "lily", false);
Person p2 = new Person(20, "lily", false);
Person p3 = new Person(21, "shizongger", true);
List<Person> list = new ArrayList<Person>();
list.add(p1);
list.add(p2);
list.add(p3);
System.out.println(list);
Set<Person> set = new HashSet<Person>();
set.addAll(list);
System.out.println(set);
}