商汤科技 8-19 java

第一题  AC 100%  leetcode原题
package LinkCode;

import java.util.Scanner;
import java.util.Stack;

public class SenseTime1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String str = sc.nextLine();
		String[] temp = str.split(" ");
		System.out.println(cal(temp));
		sc.close();
	}

	private static int cal(String[] temp) {
		// TODO Auto-generated method stub
		int len = temp.length;
		if (len == 0)
			return 0;
		Stack<Integer> stack = new Stack<Integer>();
		int num1, num2;
		for (int i = 0; i < len; i++) {
			if (temp[i].equals("+")) {
				num1 = stack.pop();
				num2 = stack.pop();
				stack.push(num2 + num1);
			} else if (temp[i].equals("-")) {
				num1 = stack.pop();
				num2 = stack.pop();
				stack.push(num2 - num1);
			} else if (temp[i].equals("*")) {
				num1 = stack.pop();
				num2 = stack.pop();
				stack.push(num2 * num1);
			} else if (temp[i].equals("/")) {
				num1 = stack.pop();
				num2 = stack.pop();
				stack.push(num2 / num1);
			} else {
				stack.push(Integer.parseInt(temp[i]));
			}
		}
		return stack.pop();
	}
}


第二题  AC 100%  leetcode原题
package LinkCode;

import java.util.Scanner;

public class SenseTime2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] arr = new int[n];
		for (int i = 0; i < n; i++)
			arr[i] = sc.nextInt();
		System.out.println(cal(arr));
		sc.close();
	}

	private static int cal(int[] arr) {
		// TODO Auto-generated method stub
		int count1 = 0, count2 = 0, res = 0;
		for (int i = 0; i < arr.length - 1; i++) {
			if (arr[i] <= arr[i + 1]) {
				if (count2 > 0) {
					if (count1 > 0) {
						res = Math.max(res, count1 + count2 + 1);
						count1 = 0;
					}
					count2 = 0;
				}
				if (arr[i] < arr[i + 1]) {
					count1++;
				} else {
					count1 = 0;
				}
			} else if (arr[i] > arr[i + 1])
				count2++;
		}
		if (count1 > 0 && count2 > 0)
			res = Math.max(res, count1 + count2 + 1);
		return res;
	}
}
第三题 递归 AC 20% 数组越界,嗯没运行就知道会越界
方法不行
package LinkCode;

import java.util.Scanner;

public class SenseTime3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		long n = sc.nextLong();
		int a = sc.nextInt();
		int b = sc.nextInt();
		int c = sc.nextInt();
		int f = sc.nextInt();
		System.out.println(fun(n, a, b, c, f));
		sc.close();
	}

	public static long fun(long n, int a, int b, int c, int f) {
		if (n < 0)
			return 0;
		else if (n == 0)
			return f;
		else {
			long temp = (long) (a * fun(n - 1, a, b, c, f) + 
					b * fun(n - 2, a, b, c, f) + c * fun(n - 3, a, b, c, f)
					+ 2 * Math.pow(n, 2) - n + 32767);
			return temp % 100000007;
		}
	}

}
第四题 AC 66.67%
package LinkCode;

import java.util.Scanner;

public class SenseTime4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] arr = new int[n];
		for (int i = 0; i < n; i++)
			arr[i] = sc.nextInt();
		System.out.println(cal(arr));
		sc.close();
	}

	private static int cal(int[] arr) {
		// TODO Auto-generated method stub
		int sum1 = 0, sum2 = 0, count1 = 0, count2 = 0;
		if (arr.length < 2 || arr.length == 0)
			return 0;
		for (int i = 0; i < arr.length - 2; i++) {
			sum1 = arr[i] + arr[i + 1];
			sum2 = arr[i + 1] + arr[i + 2];

			if (squnum(sum1) && squnum(sum2) && arr[i] != arr[i + 2])//6 10 15  15 10 6
				count1 += 1;
			if (squnum(sum1) && squnum(sum2) && arr[i] == arr[i + 2])//6 10 6 
				count2 += 1;

		}
		return (count1 * 2 + count2);

	}

	private static boolean squnum(int sum) {// 完全平方数
		// TODO Auto-generated method stub
		boolean flag = false;
		double temp = Math.sqrt(sum);
		int q = (int) temp;
		if (sum == Math.pow(q, 2))
			flag = true;
		return flag;
	}

}



#商汤科技##笔试题目#
全部评论
老哥,一模一样。第三题你用递归的方式会栈溢出的,所以百分之二十。然而我改成迭代了还是20%。。。。
点赞 回复 分享
发布于 2019-08-19 21:18
第二题是leetcode第几题
点赞 回复 分享
发布于 2019-08-19 21:21
没运行就知道会越界。。也有勇气提交的么。。
点赞 回复 分享
发布于 2019-08-19 21:19
做题的时候要监测手机嘛?
点赞 回复 分享
发布于 2019-08-19 21:20
超出表示范围了,输出例子后面有说明
点赞 回复 分享
发布于 2019-08-19 21:22
第四题 AC public class Main {     private static int[] arr={0,1,2,3,4,5,6,7,8,9};     private static int count=0;     private static Set<String> set=new HashSet<>();     public static void main(String[] args){         Scanner in=new Scanner(System.in);         count=0;         int n=in.nextInt();         if(n<=1)         {             System.out.println(0);             return;         }         int[] arr=new int[n];         for(int i=0;i<n;i++)         {             arr[i]=in.nextInt();         }         is(arr,0);         System.out.println(count);     }     private static void is(int[] arr,int index)     {         if(index>=arr.length)         {             String str=Arrays.toString(arr);             if(!set.contains(str))             {                 if(is(arr))                 {                     count++;                 }                 set.add(str);             }         }         for(int i=index;i<arr.length;i++)         {             swap(arr,i,index);             is(arr,index+1);             swap(arr,i,index);         }     }     private static void swap(int[] arr,int i,int j)     {         if(i==j)         {             return;         }         int temp=arr[i];         arr[i]=arr[j];         arr[j]=temp;     }     private static boolean is(int[] arr)     {         for(int i=1;i<arr.length;i++)         {             if(!is(arr[i-1]+arr[i]))             {                 return false;             }         }         return true;     }     private static boolean is(int n)     {         double d=Math.sqrt(n);         double ds=0;         for(int a:arr)         {             for(int i=0;i<arr.length;i++)             {                 ds=d%arr[i];                 if(ds==a)                 {                     return true;                 }             }         }         return false;     } }
点赞 回复 分享
发布于 2019-08-19 21:23
我做题时在想第4题要先全排列呢
点赞 回复 分享
发布于 2019-08-19 21:27
请问楼主第二题leetcode你刷到过了?
点赞 回复 分享
发布于 2019-08-19 21:29
老哥,第四个题你是只考虑了三个数组元素的情况吗?
点赞 回复 分享
发布于 2019-08-19 21:32

相关推荐

new和malloc的区别?c++里new了数组怎么释放?32位系统的指针变量占多大字节?int*呢?空类呢?c++多态?为什么需要虚析构?虚析构实现原理?c++可以不写构造函数吗?编译器默认除了构造还会有什么?深拷贝和浅拷贝区别?智能指针哪个c++版本引入的,作用?用过哪些容器?项目里用了哪些容器?为什么用qlist?qmap什么是key?模板的好处?什么时候会用?设计模式了解哪些?自己写过吗?单例模式怎么写?单例要返回非静态指针类型怎么弄?队列和栈的区别?osi七层以及相应协议?网络层的协议?应用层?一些项目问题...网络加密算法知道哪些?tcp的三次握手四次挥手回收写过吗?写服务器基本模...
AI牛可乐:哇,你分享了好多面试经验呢,听起来你准备得很充分呢!👍 关于你提到的技术问题,我来帮你解答一下吧: 1. `new` 和 `malloc` 的区别?`new` 会自动调用构造函数,而 `malloc` 只负责分配内存。`new` 数组释放时用 `delete[]`,比如 `delete[] myArray;`。 2. 在32位系统中,指针变量通常占4个字节,`int*` 也是如此。 3. 空类的实例通常占1个字节,但具体实现可能不同。 4. C++多态允许我们通过基类指针或引用来调用派生类的函数。需要虚析构是因为基类指针可能指向派生类对象,不使用虚析构可能导致派生类析构函数不被调用。 5. 如果不写构造函数,编译器会提供一个默认构造函数。默认构造函数会进行成员变量的默认初始化。 6. 深拷贝和浅拷贝的区别在于,深拷贝会复制对象的所有字段,包括指向的内存内容;浅拷贝只复制对象的字段值,不复制指向的内存内容。 7. 智能指针是在C++11版本引入的,用于自动管理内存,防止内存泄漏。 8. 常用的容器有 `vector`、`list`、`map` 等。具体使用哪个容器取决于项目需求。 关于你问的其他问题,我简单回答一下: - `QList` 通常用于需要频繁插入和删除的场景。 - `QMap` 的 `key` 是映射表中的键值。 - 模板的好处是提高代码复用性,减少代码冗余。 - 设计模式有很多种,比如单例模式、工厂模式等。单例模式可以通过静态成员函数实现。 现在,悄悄告诉你一个小秘密,点击我的头像,我们可以私信聊天哦~🎉 那么,你平时在项目中都用过哪些容器呢?有没有什么特别的经验或者技巧可以分享的呢?😊
点赞 评论 收藏
分享
神哥不得了:首先我就是在成都,成都的互联网格外的卷,如果是凭现在的简历的话很难找到大厂,建议再添加一个高质量的项目上去,另外专业技能的话最好是超过每一条的一半
点赞 评论 收藏
分享
评论
2
17
分享

创作者周榜

更多
牛客网
牛客企业服务