剑指offer与力扣
算法题和题解
心诚则灵'
这个作者很懒,什么都没留下…
展开
-
Java实现求两个字符串的最长公共子串
public class Demo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { String strOne = sc.next(); String strTwo = sc.next(); System.out.println(maxSubst.原创 2021-05-05 15:46:18 · 1336 阅读 · 0 评论 -
java实现两个字符串的最长公共字符串长度
这道题考的是常见的最长公共子串问题,这类问题需要用动态规划解决。dp[i][j] 表示字符串a[1...i]和字符串b[1...j]的最大公共字串长度。递推公式:如果a[i] == a[j], 那么dp[i][j] = dp[i-1][j-1] + 1; 否则 dp[i][j] = 0; public static int getCommonStrLength(String str1, String str2) { int len1 = str1.length();原创 2021-05-05 14:45:20 · 617 阅读 · 0 评论 -
力扣231. 2的幂
题目给定一个整数,编写一个函数来判断它是否是2的幂次方。示例1:输入: 1输出: true解释: 20 = 1示例2:输入: 16输出: true解释: 24 = 16示例3:输入: 218输出: false解题思路通过打表的形式与这个值对比是否相等。这个表可以通过for循环展示。class Solution { public boolean isPowerOfTwo(int n) { int count=1; .原创 2020-12-04 16:18:43 · 101 阅读 · 0 评论 -
力扣55.跳跃游戏
题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例1输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例2输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。c..原创 2020-11-23 10:52:37 · 131 阅读 · 0 评论 -
力扣142.环形链表 ||
题目给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。提示:链表中节点的数目范围在范围[0, 104]内 -105<= Node.val <= 105 pos的值为-1或者链表中的一个有效索引...原创 2020-11-18 15:26:06 · 84 阅读 · 0 评论 -
力扣908. 最小差值 I
题目给你一个整数数组 A,请你给数组中的每个元素 A[i] 都加上一个任意数字 x (-K <= x <= K),从而得到一个新数组 B 。返回数组 B 的最大值和最小值之间可能存在的最小差值。示例 1:输入:A = [1], K = 0输出:0解释:B = [1]示例 2:输入:A = [0,10], K = 2输出:6解释:B = [2,8]解题思路注意审题,任意数字 x (-K <= x <= K),还有就是最小差值。所以就可以理解为大原创 2020-11-16 10:00:53 · 180 阅读 · 0 评论 -
力扣34. 在排序数组中查找元素的第一个和最后一个位置
难度 中等题目给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是O(log n) 级别。如果数组中不存在目标值,返回[-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例2:输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1]解题思路题意是找出目标值在升序排列的...原创 2020-11-13 09:55:12 · 265 阅读 · 0 评论 -
力扣1. 两数之和
题目给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解题思路遍历一次nums数组,把数值和数组下标都存入哈希表中。取出哈希表符合条件的数组下标。class S...原创 2020-11-11 10:11:10 · 108 阅读 · 0 评论 -
力扣860.柠檬水找零
题目:在柠檬水摊上,每一杯柠檬水的售价为5美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回true,否则返回 false。示例1:输入:[5,5,5,10,20]输出:true解释:前 3 位顾客那里,我们按顺序收取 3 张 5 美...原创 2020-11-10 09:20:19 · 174 阅读 · 0 评论 -
力扣53. 最大子序和(动态规划)
题目:给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。实力:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。解题思路:可以求出数组中的每一个局部最优解,放到一个数组中,最后再求出这个数组中的最大值,即全局最优解。calss Solution{ public int maxSubArray(int[] nums){ int dp[]=ne原创 2020-11-03 14:48:41 · 114 阅读 · 0 评论 -
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解:class Solution{ public int[] twoSum(int[] nums, int target) { for(int i=0;i<nums.l原创 2020-11-03 09:54:43 · 3649 阅读 · 0 评论 -
Java剪绳子
题目描述:给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。思路分析:长度为n的绳子,请把绳子剪成整数长度的m段,长度为3的段数越多(切割越接近自然底数(约等于2.7)乘积越大!),最后的乘积越大。所以尽可能的划分更多的3,最多能够划分长度为3的块原创 2020-06-30 13:22:05 · 501 阅读 · 0 评论 -
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
编程题实现一般采用递归实现,但此题可有三种解法,并且各有优缺点。递归实现 循环迭代 数组存储递归实现先分析一下前四个数据,并推导出规律。可推导出公式f(n)=f(n-2)+f(n-1)算法实现:package com.wenchang.step;import org.omg.Messaging.SyncScopeHelper;public class T...原创 2020-03-05 13:36:54 · 1974 阅读 · 1 评论 -
输入一个英文句子,将每个单词的第一个字母改成大写字母。
输入时有多个测试样例,但字符串与数字不同,不能用EOF来实现多次输入,直接while(gets(s))就可以了。1.EOF是end of file的缩写,表示”文字流”(stream)的结尾。这里的”文字流”,可以是文件(file),也可以是标准输入(stdin)。2.EOF不是特殊字符,而是一个定义在头文件stdio.h的常量,一般等于-1。3.除了表示文件结尾,EOF还可以原创 2018-01-23 13:45:39 · 32787 阅读 · 2 评论 -
喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事,你们一定都觉得这猴子太闹腾了,其实你们是有所不知:悟空是在研究一个数学问题!
喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事,你们一定都觉得这猴子太闹腾了,其实你们是有所不知:悟空是在研究一个数学问题!什么问题?他研究的问题是蟠桃一共有多少个!不过,到最后,他还是没能解决这个难题,呵呵^-^当时的情况是这样的:第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪原创 2018-01-21 23:16:46 · 7364 阅读 · 0 评论 -
输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。
#include#includeint main(){float a,b,c,d,X;while(scanf("%f %f %f %f",&a,&b,&c,&d)!=EOF){X=sqrt((a-c)*(a-c)+(b-d)*(b-d));printf("%.2f\n",X);}return 0;}原创 2018-01-20 23:34:34 · 43337 阅读 · 4 评论 -
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
首先看十进制是如何做的: 5+7=12,三步走第一步:相加各位的值,不算进位,得到2。第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。同样我们可以用三步走的方式计算二进制值相加: 5的二进制表示为101,7的二进制表示为111第一步:相加各位的值,不考虑进位...原创 2020-04-29 16:17:18 · 845 阅读 · 0 评论