17. 抽象建模能力&发散思维能力&综合(5)
抽象建模能力
题一:【扑克牌顺子】
LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。
分析:想通过快排进行数组排序,找出大小王个数(0的个数),然后找出非大小王顺子中缺少的个数。比较大小王个数和顺子缺少个数。
public class Solution {
public boolean isContinuous(int [] numbers) {
if(numbers.length==0) return false;
//快排
quickSort(numbers,0,numbers.length-1);
//找出大小王个数
int kingNum = 0;
for(int i=0;i<numbers.length;i++){
if(numbers[i]==0){
kingNum++;
}
}
//缺少的数字个数
int lackNum = 0;
for(int i=kingNum;i<numbers.length-1;i++){
if(numbers[i]==numbers[i+1]){
return false;
}
lackNum += numbers[i+1]-numbers[i]-1;
}
if(kingNum==lackNum||kingNum==numbers.length-1){
return true;
}else{
return false;
}
}
public void quickSort(int[] numbers, int left, int right){
if(left<right){
int index = divisionSort(numbers,left,right);
quickSort(numbers,left,index-1);
quickSort(numbers,index+1,right);
}
}
public int divisionSort(int[] numbers, int left, int right){
int base = numbers[left];
while(left<right){
while(left<right&&numbers[right]>=base){
right--;
}
numbers[left] = numbers[right];
while(left<right&&numbers[left]<=base){
left++;
}
numbers[right] = numbers[left];
}
numbers[left] = base;
return left;
}
}
分析:上述分析想复杂了,顺子只有5张牌,因此保证最大值和最小值(非0)在5以内并且没有重复元素即可。代码略。
题二:【孩子们的游戏(圆圈中最后剩下的数)】
class ListNode{
int val;
ListNode next = null;
ListNode(int val){
this.val = val;
}
}
public class Solution {
public int LastRemaining_Solution(int n, int m) {
if(n<=0||m<=0) return -1;
//构建循环链表
ListNode head = new ListNode(0);
ListNode node = head;
for(int i=1;i<n;i++){
node.next = new ListNode(i);
node = node.next;
}
node.next = head;
//删除节点
int k=0;
while(node.next!=node){
if(++k==m){
node.next = node.next.next;
k=0;
}else{
node = node.next;
}
}
return node.val;
}
}
public class Solution {
public int LastRemaining_Solution(int n, int m) {
if(n<=0||m<=0) return -1;
if(n==1) return 0;
return (LastRemaining_Solution(n-1,m)+m)%n;
}
}
发散思维能力
题三:【求1+2+3+…n】
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
分析:公式法
public class Solution {
public int Sum_Solution(int n) {
return (1+n)*n/2;
}
}
分析:不给用循环,那就使用递归,if也不能用。使用逻辑与的短路特性。
public class Solution {
public int Sum_Solution(int n) {
boolean res = (n>0)&&((n+=Sum_Solution(n-1))>0);
return n;
}
}
题四:【不用加减乘除做加法】
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
分析:两个数异或:相当于每一位相加,不考虑进位;两个数相与,并左移一位:相当于求的进位。将上述两个结果相加就得到和。但是本题不允许使用+符号,因此不断进行循环,使得相与的结果为0,则异或的结果即为最终答案。(在每一轮循环中,两种操作结果的和都相等,只是因为不允许使用加号才不断循环)。
public class Solution {
public int Add(int num1,int num2) {
while(num2!=0){
int res = num1^num2;//两数异或
int carray = (num1&num2)<<1;//俩数相与,左移一位
num1 = res;
num2 = carray;
}
return num1;
}
}
综合
题五:【把字符串转换成整数】
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入一个字符串,包括数字字母符号,可以为空。如果是合法的数值表达则返回该数字,否则返回0。输入:+321456;输出:321456;/输入: la33;输出:0;
分析:字符串转换成数字,可以理解为字符转换成数字,即减去‘0’字符的ASCII值。还需要考虑内存溢出问题,非法字符串问题。
public class Solution {
public int StrToInt(String str) {
if(str==null||str.length()==0) return 0;
str = str.trim();
if(str.length()==0) return 0;
boolean flag = false;//正负标志,false表示正数,true表示负数
long res = 0;//因为可能会出现int溢出,所以先设置为long类型
char first = str.charAt(0);
if(first=='+'){
flag = false;
}else if(first=='-'){
flag = true;
}else{
res = first-'0';
}
for(int i=1;i<str.length();i++){
char ch = str.charAt(i);
if(ch<='9'&&ch>='0'){
res *= 10;
res += ch-'0';
}else{
return 0;
}
}
//判断正负
if(flag){
res = -res;
}
//处理内存溢出
if(res>Integer.MAX_VALUE||res<Integer.MIN_VALUE){
return 0;
}
return (int)res;
}
}
17. 抽象建模能力&发散思维能力&综合(5)的更多相关文章
- 面试题之发散思维能力:如何用非常规方法求1+2+···+n
今天在<剑指offer>里看到了下面这样一个简单且有趣的题,考察程序员的发散思维能力,前提是你对C++相关知识点熟悉,否则是想不出来方案的,分享给大家. 题目:求1+2+···+n,要 ...
- 64 求1+2+3+...+n(发散思维能力 )
题目描述: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 解题思路: 1)利用&&的短 ...
- 大公司的PHP面试题
1. 禁用COOKIE 后 SEESION 还能用吗? 2. 抓取远程图片到本地,你会用什么函数? 4. 你觉得在pV10W的时候, 同等配置下,LUNIX 比WIN快多少? 5. 简述pOST 和G ...
- 面试经典算法题集锦——《剑指 offer》小结
从今年 3 月份开始准备找实习,到现在校招结束,申请的工作均为机器学习/数据挖掘算法相关职位,也拿到了几个 sp offer.经历这半年的洗礼,自己的综合能力和素质都得到了一个质的提升. 实话说对于未 ...
- 《剑指offer》面试题的Python实现
<剑指Offer>是很多程序员面试前要看的书,但里面的算法都是基于C++实现的,最近用了三周左右时间,用Python完成了里面几乎所有的算法题,由于时间以及个人水平均有限,或许会有部分问题 ...
- 剑指Offer题解索引
数组 数组中重复的数字 二维数组中的查找 构建乘积数组 字符串 替换空格 字符流中第一个不重复的字符 表示数值的字符串 递归和循环 斐波那契数列 跳台阶 变态跳台阶 矩形覆盖 链表 从尾到头打印链表 ...
- 剑指offer题目记录
1.如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString { public: CMyString(char* pData = NULL); CMyStri ...
- 剑指Offer-第一章面试细节总结
面试细节:行为面试(20%)+技术面试(70%)+应聘者提问(10%) * 行为面试:跳槽者(不要抱怨老板,不要抱怨同事,只为追寻自己的理想而站斗) * 技术面试:1.基础知识点(编程语言,数据结构( ...
- Java面试大纲-java面试该做哪些准备,java开发达到这样的水平可以涨工资
Java培训结束,面临的就是毕业找工作.在找工作时,就要针对性地做充分的面试准备.准备不充分的面试,完全是浪费时间,更是对自己的不负责. 上海尚学堂Java培训整理出Java面试大纲,其中大部分都是面 ...
随机推荐
- LeetCode 5127. 删除被覆盖区间 Remove Covered Intervals
地址 https://www.acwing.com/solution/LeetCode/content/7021/ 目描述给你一个区间列表,请你删除列表中被其他区间所覆盖的区间. 只有当 c < ...
- verilog问题二三
assign语句叫连续赋值语句?为什么要叫连续,是由于等式右边是顺序执行的还是因为在执行赋值的过程中,赋值的先后顺序(实际上或者概念上)是有顺序的? 同步(复位)与异步(复位)的具体内涵:异步信号定义 ...
- 去除mysql里面重复的行并留下id最小的
DELETE FROM wynews WHERE title IN (SELECT * FROM (SELECT title FROM wynews GROUP BY title HAVING COU ...
- json解析模块
json.loads(json) 把json格式的字符串转为Python数据类型 html_json = json.loads(res.text) json.dumps(python) 把 pytho ...
- 【STM32H7教程】第24章 STM32H7的Cache解读(非常重要)
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第24章 STM32H7的Cache解读(非常重要 ...
- 【Linux命令】id,usermod用户管理命令(包括/etc/passwd、shadow、group、gshadow文件)
一.id命令 可以用来查看用户的UID.GID和附加组信息 id会显示用户以及所属群组的实际与有效ID.若两个ID相同,则仅显示实际ID.若仅指定用户名称,则显示目前用户的ID. 1.格式 id [O ...
- 借助Git实现本地与GitHub远程双向传输(同步GitHub仓库)以及一些使用错误解决
前言 GitHub作为程序员必备的学习交流平台,虽然在国内速度不算快,但只要好好利用这个平台,我相信还是可以学习到很多东西.在暑期的时候,我曾经就初次远程连接到了GitHub,但开学后,不知道为什么又 ...
- 死磕 java同步系列之StampedLock源码解析
问题 (1)StampedLock是什么? (2)StampedLock具有什么特性? (3)StampedLock是否支持可重入? (4)StampedLock与ReentrantReadWrite ...
- 练手WPF(二)——2048游戏的简易实现(上)
1.创建游戏界面编辑MainWindow.xaml,修改代码如下: <Window.Resources> <Style TargetType="Label"> ...
- DIY客户端框架
C/S类型的客户端做过好多轮了,在架构上每次都调整优化一部分,慢慢的形成了DIY的框架性东西. 可是最近这一看呢,已经不像MVC了,然后有一天看到了MVP概念,咦!很像.再一看,嗯,就该是MVP. M ...