ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2022-2-10数学day4

2022-02-10 13:02:55  阅读:182  来源: 互联网

标签:count 10 get day4 示例 need 序列 2022 put


题1:

227. 基本计算器 II

给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。

整数除法仅保留整数部分。

 

示例 1:

输入:s = "3+2*2"
输出:7

示例 2:

输入:s = " 3/2 "
输出:1

示例 3:

输入:s = " 3+5 / 2 "
输出:5

 

提示:

  • 1 <= s.length <= 3 * 105
  • s 由整数和算符 ('+', '-', '*', '/') 组成,中间由一些空格隔开
  • s 表示一个 有效表达式
  • 表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内
  • 题目数据保证答案是一个 32-bit 整数
 1 class Solution {
 2     public int calculate(String s) {
 3         Stack<Integer> stack=new Stack<>();
 4         char sign='+';
 5         int temp=0;
 6         for (int i=0;i<s.length();i++) {
 7             char c=s.charAt(i);
 8             if (Character.isDigit(c)){
 9                 temp=temp*10+(c-'0');
10             }
11             if (!Character.isDigit(c)&&c!=' '||i==s.length()-1){
12                 if (sign=='+') {
13                     stack.push(temp);
14                 }else if (sign=='-') {
15                     stack.push(-temp);
16                 }else if (sign=='*') {
17                     stack.push(stack.pop()*temp);
18                 }else stack.push(stack.pop()/temp);
19 
20                 sign=c;
21                 temp=0;
22             }
23         }
24         int ans=0;
25         while (!stack.isEmpty()) {
26             ans+=stack.pop();
27         }
28         return ans;
29     }
30 }

思路:利用栈的思想,sign记录数字前面的符号,乘除直接与栈顶数字结合,然后将新的数字进栈,最后将栈内所有结果加起来。

题2:

659. 分割数组为连续子序列

给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个长度至少为 3 的子序列,其中每个子序列都由连续整数组成。

如果可以完成上述分割,则返回 true ;否则,返回 false 。

 

示例 1:

输入: [1,2,3,3,4,5]
输出: True
解释:
你可以分割出这样两个连续子序列 : 
1, 2, 3
3, 4, 5

示例 2:

输入: [1,2,3,3,4,4,5,5]
输出: True
解释:
你可以分割出这样两个连续子序列 : 
1, 2, 3, 4, 5
3, 4, 5

示例 3:

输入: [1,2,3,4,4,5]
输出: False

 

提示:

  • 1 <= nums.length <= 10000
 1 class Solution {
 2     public boolean isPossible(int[] nums) {
 3         // count map 记录数字的数量
 4         // need 记录 拼接需要的数量
 5         Map<Integer,Integer> count=new HashMap<>();
 6         Map<Integer,Integer> need=new HashMap<>();
 7         for (int i:nums) count.put(i,count.getOrDefault(i,0)+1);
 8         for (int x:nums) {
 9             // 没有该数字了
10             if (count.get(x)==0) continue;
11             // 拼接在前面序列的背后
12             if (need.containsKey(x)&&need.get(x)>0) {
13                 count.put(x,count.getOrDefault(x,0)-1);
14                 need.put(x,need.get(x)-1);
15                 need.put(x+1,need.getOrDefault(x+1,0)+1);
16             // 从x开头拼成序列
17             }else if (count.get(x)>0&&count.getOrDefault(x+1,0)>0&&count.getOrDefault(x+2,0)>0){
18                 count.put(x,count.get(x)-1);
19                 count.put(x+1,count.get(x+1)-1);
20                 count.put(x+2,count.get(x+2)-1);
21                 need.put(x+3,need.getOrDefault(x+3,0)+1);
22             }else return false;
23         }
24         return true;
25     }
26 }

思路:贪心。优先考虑将数字拼在子序列后面,其次考虑新建一个长度为3的子序列。利用count记录数字的数量,need记录需要的数量,如果need>0则数量-1,need-1,下一个数字need+1。否则,连续3个数字数量-1,第四个数字need+1。

标签:count,10,get,day4,示例,need,序列,2022,put
来源: https://www.cnblogs.com/benbicao/p/15878598.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有