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
-
- 仔细读题审题。