力扣刷题笔记
练算法
日熙!
大四学生~计算机专业
展开
-
力扣:探索初级算法——字符串篇——整数反转
题目代码优先参考思路:https://leetcode-cn.com/problems/reverse-integer/solution/zheng-shu-fan-zhuan-by-leetcode/官方题解(C语言) int reverse(int x){ int rev = 0; while (x != 0) { int pop = x % 10; //pop一开始指的是个位数 x /= 10原创 2020-08-14 16:05:57 · 208 阅读 · 0 评论 -
力扣:探索初级算法——数组篇——有效的数独
题目:有效的数独代码(C语言)bool isValidSudoku(char** board, int boardSize, int* boardColSize){ int row[9][10] = {0};// 哈希表存储每一行的每个数是否出现过,默认初始情况下,每一行每一个数都没有出现过 // 整个board有9行,第二维的维数10是为了让下标有9,和数独中的数字9对应。 int col[9][10] = {0};// 存储每一列的每个数是否出现过,默认初始情况下原创 2020-08-08 11:04:05 · 380 阅读 · 1 评论 -
力扣:探索初级算法——数组篇——两数之和。
题目:两数之和代码(C语言)官方题解/** * Note: The returned array must be malloced, assume caller calls free(). */#define MAX_SIZE 2048int *twoSum(int *nums, int numsSize, int target, int *returnSize){ //returnSize表示返回数组长度 int i,hash[MAX_SIZE],*res=(int *)原创 2020-08-08 10:59:45 · 235 阅读 · 0 评论 -
力扣:探索初级算法——数组篇——移动零
题目:移动零代码(C语言)void moveZeroes(int* nums, int numsSize){if(nums==NULL||numsSize==0){ return;}int j=0;for(int i=0;i<numsSize;i++) { if(nums[i]!=0) { nums[j]=nums[i]; if(i!=j) { nums[i]=0;原创 2020-08-08 10:52:16 · 143 阅读 · 0 评论 -
力扣:探索初级算法——数组篇——旋转图像
题目:旋转图像给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]示例 2:给定 matrix =[[ 5, 1, 9,11],[ 2, 4, 8,10],[13, 3, 6, 7],原创 2020-08-08 10:45:06 · 178 阅读 · 0 评论 -
力扣:探索初级算法——数组篇——加一
题目:加一思路参考链接:Java 数学解题给定一个非负整数要求加1。重点是要理解这个加1,只加1则所有可能的情况只能是两种:除9之外的数字加1;数字9算法:从个位 ( 在数组的最右边 ) 开始加1,然后判断需不需要进位,若要进位 则十位上的数也是要加1,然后判断需不需要进位。依次类推每加1,就要判断需不需要进位 ——————可以用for循环来控制如何判断 要不要进位呢?只有9加1后才需要进位,9+1=10,10%10=0 , 非9个的个位数 模10 的结果仍然是自己 ——————所原创 2020-07-31 10:28:27 · 356 阅读 · 0 评论 -
力扣:探索初级算法——数组篇——只出现一次的数字-------位运算(异或运算的运用)
题目:只出现一次的数字思路(位运算的方法)官方题解怎样才满足 算法具有线性时间复杂度,不使用额外空间呢?此题目考察的是 异或运算 ⊕。本题目用到的异或运算的性质:任何数和其自身做异或运算,结果是 0,即 a⊕a=0。异或运算满足交换律和结合律,即 a ⊕\oplus⊕ b ⊕\oplus⊕ a=b ⊕\oplus⊕ a ⊕\oplus⊕ a=b ⊕\oplus⊕ (a ⊕\oplus⊕ a)=b ⊕\oplus⊕ 0=b 。任何数和 0 做异或运算,结果仍然是原来的数,即 a ⊕ 0原创 2020-07-29 10:13:44 · 182 阅读 · 0 评论 -
力扣:探索初级算法——数组篇——旋转数组----详细题解
题目:旋转数组给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [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:输入: [-1,-100,3,99] 和 k = 2输出: [3,99,-1,-100]解释:向右旋转 1 步: [99,-1,原创 2020-07-28 11:37:11 · 309 阅读 · 0 评论 -
力扣:探索初级算法——数组篇——存在重复元素------题解
题目: 存在重复元素代码(C语言)参考链接思路:先排序,后判断有没有重复的元素int comp(const void *a,const void *b){ //变量被const修饰,那么它的值就不能再被改变 return (*(int*)a > *(int*)b );}//这里是给出了comp函数,用于比较两个元素,为后面的排序做准备bool containsDuplicate(int* nums, int numsSize){ qsort(nums,numsS原创 2020-07-28 11:02:33 · 172 阅读 · 0 评论 -
力扣:探索初级算法——数组篇------买卖股票的最佳时机 II-----思路点拨
1- 题目:买卖股票的最佳时机II提示:1 <= prices.length <= 3 * 10 ^ 40 <= prices[i] <= 10 ^ 42- 代码官方题解我用的是官方提解中的方法三:简单的一次遍历 :( java )注意:此题目是已知 股票每天多少钱!!class Solution { public int maxProfit(int[] prices) { int maxprofit = 0; for (原创 2020-07-24 11:41:43 · 140 阅读 · 0 评论 -
力扣:探索初级算法——数学篇----计数质数----详细注解
题目:计数质数代码参考链接:https://leetcode-cn.com/problems/count-primes/solution/ting-shuo-zhe-jiao-e-la-duo-sai-shai-fa-zhi-xing-y/JAVA://一个数如果只能被 1 和它本身整除,那么这个数就是素数/质数class Solution { public int countPrimes(int n) { int result = 0; boolean原创 2020-07-20 16:12:02 · 133 阅读 · 0 评论 -
力扣:探索初级算法——设计问题篇----打乱数组----详细题解
设计问题这类问题通常要求你实现一个给定的类的接口,并可能涉及使用一种或多种数据结构。 这些问题对于提高数据结构是很的练习。推荐题目:打乱数组和最小栈。1- 题目:打乱数组打乱一个没有重复元素的数组。示例:// 以数字集合 1, 2 和 3 初始化数组。 int[] nums = {1,2,3}; Solution solution = new Solution(nums); // 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。 soluti原创 2020-07-17 15:55:06 · 317 阅读 · 0 评论 -
力扣:探索初级算法——动态规划篇----爬楼梯---详细题解
一开始想的是2的n次方种方法,但发现如果最后只剩一个阶梯了,是不能一次爬两个台阶的。看答案:方法一:动态规划动态规划:先讨论转移方程,再来讨论边界条件https://leetcode-cn.com/problems/climbing-stairs/solution/cong-zhi-jue-si-wei-fen-xi-dong-tai-gui-hua-si-lu-/方法二:用数学的斐波那契数列其实由方法一中找到的规律得知是数学里面的斐波那契数列:如果设an为该数列的第n项(),那么这句话可原创 2020-07-11 22:13:42 · 365 阅读 · 0 评论 -
力扣:探索初级算法——排序和搜索篇----第一个错误的版本---详细题解
题目官方题解其他人的思路代码C语言:// The API isBadVersion is defined for you.// bool isBadVersion(int version);int firstBadVersion(int n) { int left = 1; int right = n; while (left <=right) { int mid = left + (right-left)/2; //在二分查找中,原创 2020-07-08 21:29:10 · 253 阅读 · 0 评论 -
力扣:探索初级算法——树篇----二叉树的最大深度---详细题解
二叉树的最大深度题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。算法思路:c语言代码:收获(小白不太懂):1)百度所得:c语言中" : "(冒号)和问号是什么意思...原创 2020-06-03 11:10:23 · 587 阅读 · 0 评论 -
力扣:探索初级算法——链表篇——删除链表中的节点删除链表中的节点---详细题解
删除链表中的节点题目:删除链表中的节点请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:> 输入: head = [4,5,1,9], node = 5 输出: [4,1,9] 解释: 给定你链表中值为 5> 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], nod原创 2020-05-30 16:23:40 · 261 阅读 · 0 评论 -
力扣:探索初级算法——字符串篇——反转字符串----详细题解
反转字符串题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例 2:输入:[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“原创 2020-05-19 18:33:17 · 267 阅读 · 0 评论 -
力扣:探索初级算法——数组篇——删除排序数组中的重复项---详细题解
删除 排序数组中的 重复项题目:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该原创 2020-05-16 20:25:46 · 264 阅读 · 0 评论 -
力扣题目——动态规划题目:股票问题01
动态规划题目——股票问题参考链接:一个方法团灭6道股票问题:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/solution/yi-ge-fang-fa-tuan-mie-6-dao-gu-piao-wen-ti-by-l-3/本文只是按照自己的理解把这篇文章疏通、简化一下思路核心思想:用状态机的技巧来解决( DP table)具体思路分析:一、不用递归思想,而用[状态]进行穷举——具体到每一天,列举出每一天原创 2020-05-10 15:39:35 · 191 阅读 · 0 评论