欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > 算法题笔记

算法题笔记

2024/10/24 10:22:43 来源:https://blog.csdn.net/qq_47541315/article/details/140026299  浏览:    关键词:算法题笔记

主要记录python的力扣题解

参考的优质网站:

算法通关手册(LeetCode) | 算法通关手册(LeetCode) (itcharge.cn)

代码随想录 (programmercarl.com)

2024.6.28

题目:轮转数组

官网连接:189. 轮转数组 - 力扣(LeetCode)

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

示例 1:

输入: nums = [1,2,3,4,5,6,7], k = 3
输出:[5,6,7,1,2,3,4]
解释:
向右轮转 1 步:[7,1,2,3,4,5,6]
向右轮转 2 步:[6,7,1,2,3,4,5]
向右轮转 3 步:[5,6,7,1,2,3,4]

示例 2:

输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释: 
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]

思考10分钟~

解题思路:

可先把整个数组翻转一下,这样后半段元素就到了前边,前半段元素就到了后边,只不过元素顺序是反着的。我们再从 𝑘k 位置分隔开,将 [0...𝑘−1][0...k−1] 区间上的元素和 [𝑘...𝑛−1][k...n−1] 区间上的元素再翻转一下,就得到了最终结果。

python语言:

class Solution:def rotate(self, nums: List[int], k:int) -> None:def reverse(i:int, j:int) -> None:while i < j:nums[i], nums[j] = nums[j], nums[i]i += 1j -= 1n = len(nums)k %= nreverse(0,n-1)reverse(0,k-1)reverse(k,n-1)
class solution:def rotate(self, nums:List[int], k:int) -> None:"""Do not return anything, modify nums in-place instead."""n = len(nums)k %= ndef reverse(self, nums:List[int], L:int, R:int) -> Nonewhile L < R:nums[L], nums[R] = nums[R], nums[L]L += 1R -= 1

C 语言

void rotate(int* nums, int numsSize, int k)
{k %= numsSize;reverse(nums, 0, numsSize-1);reverse(nums, 0, k-1);reverse(nums, k, numsSize-1);
}void reverse(int* nums, int L, int R)
{while (L < R){int temp = nums[L];nums[L] = nums[R];num[R] = temp;L++;R--;}}

2024.07.01

 题目:加一

官网连接:66. 加一 - 力扣(LeetCode)

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。

思考10分钟~

解题思路:

这道题把整个数组看成了一个整数,然后个位数加 11。问题的实质是利用数组模拟加法运算。

如果个位数不为 99 的话,直接把个位数加 11 就好。如果个位数为 99 的话,还要考虑进位。

具体步骤:

  1. 数组前补 00 位。
  2. 将个位数字进行加 11 计算。
  3. 遍历数组
  • 如果该位数字大于等于 1010,则向下一位进 11,继续下一位判断进位。
  • 如果该位数字小于 1010,则跳出循环。

python语言:

class Solution:def plusOne(self, digits:List[int]) -> List[int]:digits = [0] + digitsdigits[len(digits) - 1] += 1for i in range(len(digits)-1, 0, -1):if digits[i] != 10:breakelse:digits[i] = 0digits[i -1] += 1if digits[0] == 0:return digits[1:0]else:return digits

思路二:字数类型转换 

class solution:def plusOne(self, digits:List[int]) -> List[int]:s = ""l = []for i in digits:s += str(i)for i in str(int(s)+1):l.append(int(i))return l
    return list(map(int, str(int("".join(list(map(str, digits)))) + 1)))

C 语言

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* plusOne(int* digits, int digitsSize, int* returnSize) 
{for(int i = digitsSize -1; i >= 0; --i){digits[i] += 1;if (digits[i] != 10){*returnSize = digitsSize;return digits;}if (digits[i] == 10){digits[i] =0;}}//元素全为9开辟新数组int* ans = malloc(sizeof(int) * (digitsSize + 1));memset(ans, 0, sizeof(int) * (digitsSize + 1));//全部置0ans[0] = 1;*returnSize = digitsSize + 1;return ans;}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com