• 剑指offer之数组


    总结:

    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 }
  • 相关阅读:
    旋转数组求最小值
    docker
    php爬虫
    docker,docker-compose 安装
    ReactPHP
    Workerman了解一下
    ubantu 运行.sh 脚本的问题
    ubantu 文件权限 Permission denied
    ubantu 文件属性
    mysql命令行中执行sql的几种方式总结
  • 原文地址:https://www.cnblogs.com/lizijiangmm/p/8798440.html
Copyright © 2020-2023  润新知