当前位置:   article > 正文

android-java面试题_android应届毕业生java面试题

android应届毕业生java面试题

1.冒泡排序

原理:

相邻的俩个元素比较,第一轮结束,最后一个是最大的

第二轮只需要比较leng-1-i即可,因为最后一个元素已经是最大的了

  1. int[] arr = {3, 8, 7, 5, 1, 6};
  2. for (int i = 0; i < arr.length - 1; i++) {
  3. for (int j = 0; j < arr.length - 1 - i; j++) {
  4. if (arr[j] > arr[j + 1]) {
  5. int temp = arr[j];
  6. arr[j] = arr[j + 1];
  7. arr[j + 1] = temp;
  8. }
  9. }
  10. }

2.选择排序

每一个元素和其他元素,逐一比较,第一轮结束后,最小的值在最左边

  1. int[] arr = {3, 8, 7, 5, 1, 6};
  2. for (int i = 0; i < arr.length - 1; i++) {
  3. for (int j = i + 1; j < arr.length; j++) {
  4. if (arr[i] > arr[j]) {
  5. int temp = arr[i];
  6. arr[i] = arr[j];
  7. arr[j] = temp;
  8. }
  9. }
  10. }

3.二分查找

找一个数组的中间 元素,去比较要查找的元素值,跳效率

  1. int[] arr = {3, 8, 7, 5, 1, 6};
  2. getValue(arr, 3);
  3. private int getValue(int[] arr, int value) {
  4. int min = 0;
  5. int max = arr.length - 1;
  6. int mid = (min + max) / 2;
  7. while (arr[mid] != value) {
  8. if (arr[mid] > value) {
  9. max = mid - 1;
  10. } else if(arr[mid] < value) {
  11. min = mid + 1;
  12. }
  13. mid = (min + max) / 2;
  14. if (min > max) {
  15. return -1;
  16. }
  17. }
  18. return mid;
  19. }

4.快速排序

 

快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离就大的多了。因此总的比较和交换次数就少了,速度自然就提高了。当然在最坏的情况下,仍可能是相邻的两个数进行了交换。因此快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2),它的平均时间复杂度为O(NlogN)。其实快速排序是基于一种叫做“二分”的思想。我们后面还会遇到“二分”思想,到时候再聊。

  1. int[] arr = {3, 8, 7, 5, 1, 6};
  2. getValue(arr, 0, arr.length - 1);
  3. private void getValue(int[] arr, int low, int high) {
  4. if (low > high) {
  5. return;
  6. }
  7. int i = low;
  8. int j = high;
  9. int temp = arr[low];
  10. while (i < j) {
  11. while (arr[j] >= temp && i < j) {
  12. j--;
  13. }
  14. while (arr[i] <= temp && i < j) {
  15. i++;
  16. }
  17. if (i < j) {
  18. int t = arr[i];
  19. arr[i] = arr[j];
  20. arr[j] = t;
  21. }
  22. }
  23. arr[low] = arr[i];
  24. arr[i] = temp;
  25. getValue(arr, low, j - 1);
  26. getValue(arr, j + 1, high);
  27. }

5.在字符串中找到第一个不重复的字符

灵活的运用linkedHasmap的特性,有序的

  1. String str = "hellowee";
  2. getFirstNoRepeatChar(str );
  3. private char getFirstNoRepeatChar(String str) {
  4. char[] chars = str.toCharArray();
  5. LinkedHashMap<Character, Integer> linkedHashMap = new LinkedHashMap<>();
  6. for (int i = 0; i < chars.length; i++) {
  7. linkedHashMap.put(chars[i], linkedHashMap.containsKey(chars[i]) ? linkedHashMap.get(chars[i]) + 1 : 1);
  8. }
  9. for (Map.Entry<Character, Integer> entry : linkedHashMap.entrySet()) {
  10. if (entry.getValue() == 1) {
  11. return entry.getKey();
  12. }
  13. }
  14. return ' ';
  15. }

 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号