牛客[编程题] hj57 高精度整数加法-编程思维

HJ57 高精度整数加法 中等  通过率:36.15%  时间限制:1秒  空间限制:32M   描述 输入两个用字符串 str 表示的整数,求它们所表示的数之和。   数据范围: 1 \le len(str) \le 10000 \1≤len(str)≤10000  输入描述: 输入两个字符串。保证字符串只含有'0'~'9'字符 输出描述: 输出求和后的结果

牛客[编程题] hj88 扑克牌大小-编程思维

  HJ88 扑克牌大小 较难  通过率:28.08%  时间限制:1秒  空间限制:32M   描述 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER输入两手牌,两

双指针技巧数组题目-编程思维

题目 难度 要点 删除有序数组中的重复项 ● 快指针与慢指针值不同,那么应该将值放在慢指针下一位 移除元素 ● 快指针对应值若不需移除,那么应该将值放在当前慢指针 最长回文子串 ● 以当前位置或者当前位置及相邻位置扩散寻找回文子串 删除有序数组中的重复项 class Solution { public int removeDuplicates(int[] nu

前缀和-编程思维

题目 难度 要点 区域和检索 - 数组不可变 ● 构造前缀和数组,避免每次O(n)遍历统计区间和 二维区域和检索 - 矩阵不可变 ● 矩阵前缀和,并通过矩阵加减拼凑目标矩阵 区域和检索 - 数组不可变 class NumArray { private int[] preSum; public NumArray(int[] nums) {

差分数组-编程思维

题目 难度 要点 拼车 ● 不需要构造原始数组,直接判断即可 航班预定统计 ● 构造原始数组 区间加法 ● 构造原始数组 差分数组中,diff[i] 就是 nums[i] 和 nums[i-1] 之差;diff[0] = nums[0]; 拼车 class Solution { public boolean carPooling(int[][] trips

链表双指针技巧-编程思维

题目 难度 要点 分隔链表 ● 快慢指针:不用两个新链表拼接,使用原地修改 合并K个升序链表 ● 最小堆:类ProirityQueue的使用 环形链表 ● 快慢指针:相遇有环 环形链表II ● 快慢指针:入环第一个节点 分隔链表 题目要求按原顺序,以x值将小的放链表前半段,其他的放链表后半段。很容易想到一种解法,新开两条链表分别存放,最后将两条链表合并。题目难度

链表反转-编程思维

题目 难度 要点 反转链表 ● 注意新节点头 反转链表II ● 注意新节点头和后续的节点,需要和其他部分拼接 K 个一组翻转链表 ● 注意新节点头和后续的节点,需要和其他部分拼接 递归 反转链表 public ListNode reverseList(ListNode head) { if (head == null || head.next == n

lru算法-编程思维

思路 LRU算法,访问/更新/插入都会将数据置于队尾(假设队头淘汰)。 看3种情况的变化: 插入:简单置于队尾即可。 更新:删除原有节点,新增节点置于队尾。 访问:将原节点提至队尾。 除了插入只需要简单接到链表尾部以外,更新和访问都是可能操作链表中间的,所以自然地就需要引入Map来快速找到对应节点。 并且无论是更新的删除原有节点还是访问的将原节点提至队尾,都需要在链表中间删除节点,所以需要双

leetcode 1-5-编程思维

1:两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 2 <= nums.length <= 104 -109 <= nums[i] <= 109 -1

分治法求解问题-编程思维

一、寻找两个等长有序序列的中位数 1.1 问题描述   对于一个长度为n的有序序列(假设均为升序序列),a[0...n-1],处于中间位置的元素称为a的中位数,现要求两个等长有序序列合并的中位数。 1.2 求解思路   对于求两个有序序列a[],b[]的中位数,首先考虑到二路归并后求其中位数c[m](m=(s+t)/2,s为序列左侧编号,t为序列右侧编号,对于偶数位中位数,只考虑下中位),但时间

求解幂集问题、简单0/1背包问题-编程思维

一、幂集问题 1.1 问题描述   对于给定的正整数n(n>=1),求1-n构成的集合的幂集(即由1-n的集合中所有自己构成的集合,包括全集和空集)。 1.2 求解思路与代码 1、直接穷举法:将1-n存放到数组a中,用b数组中1-n的元素来标记(0为不在当前集合,1为在当前集合),此时便可将问题转化为:例如,n=3,幂集便是000-111每个数中1对应的数字所组成的集合,只需要将b数组从0

一文详解贝叶斯优化(bayesian optimization)原理-编程思维

参考资料: Expected Improvement formula for Bayesian Optimisation 通俗科普文:贝叶斯优化与SMBO、高斯过程回归、TPE 理解贝叶斯优化 A Tutorial on Bayesian Optimization 贝叶斯优化是一种求解函数最优值的算法,它最普遍的使用场景是在机器学习过程中对超参数进行调优。贝叶斯优化算法的核心框架是SMBO

约瑟夫环问题-编程思维

约瑟夫问题是一个著名问题:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,剩下最后一个人,求最后的胜利者。 例如只有三个人,把他们叫做A,B,C。 从A开始报数,把报2的杀掉。 - 首先A报数,他报1,逃过一劫 - 然后B报数,他报2,真惨,他被杀了 - 然后C继续报数,他报1,逃过一劫 - 接着轮到A报数,他报2,躲得过初一躲不过15,他被杀了

java丑数-编程思维

leetcode题目链接 有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。 示例 1: 输入: k = 5 输出: 9 根据题意我们可以知道,一个满足要求的数一定是之前的一个dp3* 3,dp5* 5,dp7* 7,并且这一结果一定是三个乘积的最小值,因此我

图及相关算法-编程思维

图 准备找实习了,把忘了的东西从头捡一捡 基本实现 大一时候有个特别蠢的问题,一直老想为什么不内置图的实现,现在想想真是蠢到家了…… Go语言实现无向无环图 import "fmt" //Implment by adjacency matrix type graphadjMat struct { vertices []int adjMat [][]int } func newGrap

力扣题解(持续更新)-编程思维

一、双指针 27. 移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 package leetCodePractice; /** * @Date 2023/9/11 17:

【算法题】多数元素-编程思维

🔗题目链接 ✈题目描述: 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 ⌊ n/2 ⌋表示n/2结果向下取整。 🚆数据范围: n == nums.length 1 <= n <= 5 * 104 -109 <= nums[i] <= 10

【算法题】合并两个有序数组-编程思维

💎题目来源 💎题目描述: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m