码迷,mamicode.com
首页 > 编程语言 > 详细

剑指offer之数组

时间:2018-04-11 21:45:07      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:剑指offer   面试   利用   string   状态   false   duplicate   面试题   system   

总结:

  1. 关键点是分析规律,可通过分析简单具体的例子,试图寻找普遍的规律。
  2. 利用数组随机存取和连续存储的特点,方便操作。
  3. 特别注意有序或无序状态。
 1 public class Solution {
 2 /*面试题3:
 3 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,
 4 但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
 5 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
 6  */
 7 //从头开始扫描,判断数字和下标是否符合,符合则不作处理,继续判断下一个数字
 8 //不符合则先判断当前数字与其所对应位置的数字是否相等,若相等则找到重复数字,即当前数字
 9 //若不相等则交换数字的位置,交换后继续判断当前位置的数字,注意是继续当前位置的判断while控制,符合才进入下一轮for循环
10     public boolean duplicate(int number[],int length,int[] dup ){
11         int temp;
12         if(length <=1) return false;
13         for(int i = 0;i <number.length;i++){
14             while(number[i] != i){//当前数字不等于前下标,则判断等于数字下标的位置的数字
15                 if(number[number[i]] != number[i]){//若不相等,则交换
16                     temp = number[number[i]];
17                     number[number[i]] = number[i];
18                     number[i] = temp;
19                 }
20                 else{//若相等,则说明找到重复数字,返回并退出
21                     dup[0] = number[i];
22                     return true;
23                 }
24             }
25         }
26         return false;
27     }
28     /*面试题4:
29     在一个二维数组中,每一行都按照从左到右递增的顺序排序,
30     每一列都按照从上到下递增的顺序排序。请完成一个函数,
31     输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
32      */
33     /*
34     思路:关键在于找到规律,从右上角开始判断,逐渐的去除行或者列(转变为对行号或列号的简单操作)
35      */
36     public boolean Find(int target, int [][] array) {
37         int i = 0,len = array.length;//行数
38         int j = array[0].length - 1;
39         while(i < len && j >= 0){
40             if(target == array[i][j]) return true;
41             else if(target < array[i][j]) j--;
42             else i++;
43         }
44         return false;
45     }
46     public static void main(String args[]){
47         int num[] = {2,3,1,0,2,5,3},dup[]={0};
48         int a[][] = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
49         Solution s = new Solution();
50         Boolean flag = s.duplicate(num, num.length,dup);
51         if(flag){
52             System.out.println(dup[0]);
53         }
54         System.out.println(s.Find(10,a));
55     }
56 }

 

剑指offer之数组

标签:剑指offer   面试   利用   string   状态   false   duplicate   面试题   system   

原文地址:https://www.cnblogs.com/lizijiangmm/p/8798440.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!