408算法题备考第一天

目录

  • 数组中重复的数字
    • 思路
    • 收获
    • 代码
  • 二维数组中的查找
    • 思路
    • 收获
    • 代码

数组中重复的数字

思路

使用哈希表记录

收获

  1. C语言中不能使用临时变量定义数组的同时进行初始化,要么使用常数,要么const int N=1000;

代码

class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
        int l=nums.size();
        const int N=100000;
        int hashtable[N]={0};
        for(int i=0;i<l;i++){
            // for(int i=0;i
            //     printf("%d ",nums[i]);
            // }
            // printf("\n");
            printf("%d %d\n",nums[i],hashtable[nums[i]]);
            if(hashtable[nums[i]]==0){
                hashtable[nums[i]]+=1;
            }else{
                return nums[i];
            }
        }
        return 0;
    }
};

二维数组中的查找

思路

既然右边和下面都比自己大,从左上角和右下角出发都会有两个方向走
而从左下角或者右上角走就可以往一个方向走
故从右上角开始走

收获

  • 注意判空
  • 想清楚思路,再动手写代码,否则连自己具体需要什么变量都不知道,关键参数就是横坐标和纵坐标

代码

class Solution {
public:
    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
        
        int row=matrix.size();
        if(row==0){
            return false;
        }
        int col=matrix[0].size();
        int r=0;
        int c=col-1;
        
        while(r<row&&c>=0){
            printf("%d %d\n",r,c);
            int value=matrix[r][c];
            if(value==target){
                return true;
            }else if(value>target){
                c--;
            }else{
                r++;
            }
        }
        return false;

    }
};

你可能感兴趣的:(算法,leetcode,数据结构)