每日刷题记录(十二)

这篇具有很好参考价值的文章主要介绍了每日刷题记录(十二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一题:Fibonacci数列

描述
Fibonacci数列是这样定义的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。

输入描述:
输入为一个正整数N(1 ≤ N ≤ 1,000,000)

输出描述
输出一个最小的步数变为Fibonacci数"

示例1

输入: 15
输出: 2

解题思路:

  1. 先找到距离n最近的两个Fibonacci数
  2. 求出这两个Fibonacci数距离n最短的距离

代码实现:

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) { 
            int n = in.nextInt();
            int f1 = 0;
            int f2 = 1;
            while(n > f2) {
                int f3 = f1 + f2;
                f1 = f2;
                f2 = f3;
            }
            int ret = Math.min(n-f1,f2-n);
            System.out.println(ret);
        }
    }
}

第二题:合法括号序列判断

描述
给定一个字符串A和其长度n,请返回一个bool值代表它是否为一个合法的括号串(只能由括号组成)。

测试样例:

“(()())”,6
返回:true

测试样例:

“()a()()”,7
返回:false

测试样例:

“()(()()”,7
返回:false

解题思路:

  1. 先判断字符串是否为偶数个字符
  2. 用栈结构实现,栈中存放左括号,当遇到右括号之后,检查栈中是否有左括号,如果有则出栈,如果没有,则说明不匹配

代码实现:

public class Parenthesis {
    public boolean chkParenthesis(String A, int n) {
        if(n%2 != 0) {
            return false;
        }
        Stack<Character> stack = new Stack<>();
        for(char ch : A.toCharArray()) {
            if(ch == '(') {
                stack.push(ch);
            }else if(ch == ')') {
                if(stack.isEmpty()) {
                    return false;
                } else if(stack.peek() == '(') {
                    stack.pop();
                }
            }else {
                return false;
            }
        }
        return stack.isEmpty();
    }
}

第三题:求最小公倍数

描述
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
数据范围:
1≤a,b≤100000

输入描述:
输入两个正整数A和B。

输出描述:
输出A和B的最小公倍数。

示例1

输入: 5 7
输出: 35

示例2

输入: 2 4
输出: 4

解题思路:

  1. 最小公倍数 = 两数之积除以最大公约数
  2. 使用碾转相除法进行最大公约数的求解,对于输入的两个数进行连续求余,直到
    余数为0,求余的分母即为结果

代码实现:

public class Main {
    public static int fun(int a, int b) {
        if (a == b) {
            return a;
        }
        if (a < b) {
            int tmp = a;
            a = b;
            b = tmp;
        }
        int r = 0;
        while ((r = a % b) > 0) {
            a = b;
            b = r;
        }
        return b;
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int a = in.nextInt();
            int b = in.nextInt();
            int ret = fun(a, b);
            System.out.println((a*b)/ret);
        }
    }
}

第四题:两种排序方法

描述
考拉有n个字符串字符串,任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法: 1.根据字符串的字典序排序。例如:
“car” < “carriage” < “cats” < "doggies < “koala”
2.根据字符串的长度排序。例如:
“car” < “cats” < “koala” < “doggies” < “carriage”
考拉想知道自己的这些字符串排列顺序是否满足这两种排序方法,考拉要忙着吃树叶,所以需要你来帮忙验证。

输入描述:
输入第一行为字符串个数n(n ≤ 100) 接下来的n行,每行一个字符串,字符串长度均小于100,均由小写字母组成

输出描述:
如果这些字符串是根据字典序排列而不是根据长度排列输出"lexicographically",
如果根据长度排列而不是字典序排列输出"lengths",
如果两种方式都符合输出"both",否则输出"none"

示例1

输入: 3 a aa bbb
输出: both

解题思路:

  1. 将接收的字符串都放到String数组中
  2. 利用string的compareTo方法来按ascii比较字符串字典序排序
  3. 利用string的length方法来比较字符串的长度排序

代码实现:

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader re = new BufferedReader(
            new InputStreamReader(System.in));
        int n = Integer.parseInt(re.readLine());
        String[] str = new String[n];
        for (int i = 0; i < n; i++) {
            str[i] = re.readLine();
        }
        if (isSortZhiDian(str) && isSortLength((str))) {
            System.out.println("both");
        } else if (isSortZhiDian(str)) {
            System.out.println("lexicographically");
        } else if (isSortLength(str)) {
            System.out.println("lengths");
        } else {
            System.out.println("none");
        }
    }
    public static boolean isSortZhiDian(String[] str) {
        for (int i = 0; i < str.length - 1; i++) {
            if (str[i].compareTo(str[i + 1]) > 0) {
                return false;
            }
        }
        return true;
    }
    public static boolean isSortLength(String[] str) {
        for (int i = 0; i < str.length - 1; i++) {
            if (str[i].length() > str[i + 1].length()) {
                return false;
            }
        }
        return true;
    }
}

第五题:另类加法

描述
给定两个int A和B。编写一个函数返回A+B的值,但不得使用+或其他算数运算符。

测试样例:

1,2
返回:3文章来源地址https://www.toymoban.com/news/detail-408988.html

解题思路:

  1. 二进制位异或运算相当于对应位相加,不考虑进位
  2. 二进制位与运算左移一位相当于对应位相加之后的进位
  3. 两个数相加:对应二进制位相加的结果 + 进位的结果,当进位之后的结果为0时,相加结束

代码实现:

import java.util.*;
public class UnusualAdd {
    public int addAB(int A, int B) {
        if(B == 0) {
            return A;
        }
        int sum = 0;
        int carry = 0;
        while(B != 0) {
            sum = A^B;
            carry = (A&B)<<1;
            A = sum;
            B = carry;
        }
        return A;
    }
}

到了这里,关于每日刷题记录(十二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用斐波那契(Fibonacci)数列来测试各大语言的性能

    笔者使用最多的语言是C++,目前项目中在使用Go,也使用过不少其它语言,像Erlang,Python,Lua,C#等等。最近看到C#夺冠,首次荣获 TIOBE 年度编程语言,同时也看到网上有不少Java与C#之争的文章,于是就想要来做一个性能比较。 这里参与性能比较的是以下几门语言:Go、C#、

    2024年01月17日
    浏览(49)
  • 蓝桥杯专题-试题版-【01字符串】【2n皇后问题】【A+B问题】【Fibonacci数列】

    点击跳转专栏=Unity3D特效百例 点击跳转专栏=案例项目实战源码 点击跳转专栏=游戏脚本-辅助自动化 点击跳转专栏=Android控件全解手册 点击跳转专栏=Scratch编程案例 点击跳转=软考全系列 点击跳转=蓝桥系列 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、

    2024年02月11日
    浏览(44)
  • C++ 之LeetCode刷题记录(十二)

    😄😊😆😃😄😊😆😃 开始cpp刷题之旅。 依旧是追求耗时0s的一天。 示例 1: 输入:x = 4 输出:2 示例 2: 输入:x = 8 输出:2 解释:8 的算术平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。 思路:这种题目一看就是二分法,很简单的题目,耗时0s,看代码。

    2024年01月18日
    浏览(57)
  • 每日刷题记录(十六)

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1 阶 + 1 阶 2 阶 示例 2: 输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。 1 阶 + 1 阶

    2023年04月25日
    浏览(42)
  • 每日刷题记录(十七)

    求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等及条件判断语句(A?B:C)。 示例 1: 输入: n = 3 输出: 6 示例 2: 输入: n = 9 输出: 45 本题需要用到逻辑运算符的短路性质。以逻辑运算符为例,对于A B这个表达式,如 A表达式返回False ,那么 A B 已经确定

    2023年04月23日
    浏览(31)
  • 华为真题--数列描述

    /** * ■ 题目描述 * * 【数列描述】 * * 有一个数列a[N] (N=60),从a[0]开始,每一项都是一个数字。数列中a[n+1]都是a[n]的描述。其中a[0]=1。 * * 规则如下: * * a[0]:1 * * a[1]:11(含义:其前一项a[0]=1是1个1,即“11”。表示a[0]从左到右,连续出现了1次“1”) * * a[2]:21(含义:其前一项

    2024年02月13日
    浏览(62)
  • LeetCode刷题---斐波那契数列模型

    顾得泉: 个人主页 个人专栏: 《Linux操作系统》  《C/C++》  《LeedCode刷题》 键盘敲烂,年薪百万! 题目链接:1137. 第 N 个泰波那契数   泰波那契序列Tn定义如下:         T0=0,T1=1,T2= 1,且在n=0的条件下Tn+3= Tn+Tn+1t+Tn+2         给你整数n,请返回第n个泰波那契数Tn的值

    2024年02月04日
    浏览(53)
  • 每日算法打卡:波动数列 day 16

    1214. 波动数列 题目难度:中等 题目来源:第五届蓝桥杯省赛C++ A组,第五届蓝桥杯省赛Java A组 观察这个数列: 1 3 0 2 -1 1 -2 … 这个数列中后一项总是比前一项增加2或者减少3, 且每一项都为整数 。 栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增

    2024年01月16日
    浏览(54)
  • 第二章(第一节):数列与极限

    极限理论是高等数学的基础,高等数学中的很多基本概念都是借助极限的方法来描述的,我们以数列为研究,引入极限的概念 一个数列 {an} 的第 n 项, an 与项数 n 的关系,如果可以用一个公式来表示,这个公式就叫做这个数列的 通项公式 。 1.数列 1,2,3,4,…,n,… 的

    2024年02月08日
    浏览(40)
  • 【动态规划刷题 12】等差数列划分&& 最长湍流子数组

    链接: 139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入: s = “leetcode”, wordDict = [“leet”, “code”] 输出: t

    2024年02月09日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包