LeetCode解题思路(合集)陆续更新......

LeetCode解题思想


算法解题思路汇总


前言

该文章用于记录LeetCode刷题中有意思的解题思路 。
会陆续更新…


一、循环的巧用解题

1.将每个元素替换成右侧最大的元素。——1299

在这里插入图片描述
在这里插入图片描述
限制条件:

  • 1 <= arr.length <= 10^4
  • 1 <= arr[i] <= 10^5

解题代码如下:

int* replaceElements(int* arr, int arrSize, int* returnSize){
    int i;
    int now_num = -1, befor_num;			//‘-1’由题意最后一个数该是-1
    for(i = arrSize - 1; i > -1; i--){
        befor_num = now_num;
        if(befor_num < arr[i])				//比较求出最大值
            now_num = arr[i];
        arr[i] = befor_num;					//替换与非arr当前值,的最大值
    }
    *returnSize = arrSize;
    return arr;
}

思路描述:
循环从右边开始,每次记录最大的值,并将arr当前的值替换为记录的最大值。
该替换操作,是替换与非自身的最大值。


二. 位运算

461. 明汉距离。

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。

该题的重点就是,将所给的x和y数转换为二进制然后计算相同位置不同数,的个数。
即:将两个数异或操作后计算1的个数。

代码如下:

int hammingDistance(int x, int y){
    int sum = 0;
    int xor = x ^ y;
    while(xor)
    {
        sum++;
        xor &= (xor - 1); 
    }
    return sum;
}

xor &= (xor - 1):清除最后一位的1。 布赖恩.尼克根算法
在这里插入图片描述


三 . 树(tree)

1. 二叉搜索树

二叉搜索树的定义:
即:节点的左子树要小于节点本身,节点的右子树要大于节点本身。
例题:
在这里插入图片描述
该题切入点:通过搜索二叉树的特点,左子树小于根节点,右子树大于根节点的特性,进行判断。

struct TreeNode* searchBST(struct TreeNode* root, int val){
    if(root == NULL) return NULL;
    if(root->val == val) return root;

    if(root->val > val)
        return searchBST(root->left, val);
    else return searchBST(root->right, val);
}

error list

    1. 仔细读题审题。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值