题目来自lintcode,答案来自九章算术,将自己在lintcode上训练的一些简单算法题贴出来,作为知识的总结与整理。便于查看复习。

第一部分(入门级别,只做了开放的部分,大部分需要收费的VIP才有权限做)

1、反转一个只有3位数的整数。

你可以假设输入一定是一个只有三位数的整数,这个整数大于等于100,小于1000。

样例

样例 1:

输入: number = 123
输出: 321

样例 2:

输入: number = 900
输出: 9

答案:

public class Solution {/*** @param number: A 3-digit number.* @return: Reversed number.*/public static int reverseInteger(int number) {return number%10*100+number%100/10*10+number/100;}public static void main (String[] args) {int finalNumber= reverseInteger(145);}
}

2、大小写转换

将一个字符由小写字母转换为大写字母

你可以假设输入一定在小写字母 a ~ z 之间

样例

样例 1:

输入: 'a'
输出: 'A'

样例 2:

输入: 'b'
输出: 'B'

答案:

public class Solution {/*** @param character: a character* @return: a character*/public char lowercaseToUppercase(char character) {return  Character.toUpperCase(character);}
}

 3、斐波纳契数列

查找斐波纳契数列中第 N 个数。

所谓的斐波纳契数列是指:

  • 前2个数是 0 和 1 。
  • 第 i 个数是第 i-1 个数和第i-2 个数的和。

斐波纳契数列的前10个数字是:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...

在测试数据中第 N 个斐波那契数不会超过32位带符号整数的表示范围

您在真实的面试中是否遇到过这个题?  是

题目纠错

样例

样例  1:输入:  1输出: 0样例解释: 返回斐波那契的第一个数字,是0.样例 2:输入:  2输出: 1样例解释: 返回斐波那契的第二个数字是1.

答案:

public class Solution {/*** @param n: an integer* @return: an ineger f(n)*/public int fibonacci(int n) {if(n>=1){int [] number=new int [n];number[0]=0;if (n==1) {number[n-1]=0;  }else  {number[1]=1;for(int i=2;i<n;i++) {number[i]=number[i-1]+number[i-2];}}return number[n-1];}return n;    }
}

 4、交换数组两个元素

给你一个数组和两个索引,交换下标为这两个索引的数字

样例

样例 1:

输入:  [1, 2, 3, 4], index1 = 2, index2 = 3
输出:  交换后你的数组应该是[1, 2, 4, 3], 不需要返回任何值,只要就地对数组进行交换即可。
样例解释: 就地交换,不需要返回值。

样例 2:

答案:

public class Solution {/*** @param A: An integer array* @param index1: the first index* @param index2: the second index* @return: nothing*/public void swapIntegers(int[] A, int index1, int index2) {int tempt=A[index1];A[index1]=A[index2];A[index2]=tempt;}
}

5、整数排序(给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。

样例  1:输入:  [3, 2, 1, 4, 5]输出:  [1, 2, 3, 4, 5]样例解释: 返回排序后的数组。样例 2:输入:  [1, 1, 2, 1, 1]输出:  [1, 1, 1, 1, 2]样例解释: 返回排好序的数组。

官方参考答案:

几种O(n^2)O(n2)时间复杂度的排序算法

/**
* 本参考程序来自九章算法,由 @九章算法 提供。版权所有,转发请注明出处。
* - 九章算法致力于帮助更多中国人找到好的工作,教师团队均来自硅谷和国内的一线大公司在职工程师。
* - 现有的面试培训课程包括:九章算法班,系统设计班,算法强化班,Java入门与基础算法班,Android 项目实战班,
* - Big Data 项目实战班,算法面试高频题班, 动态规划专题班
* - 更多详情请见官方网站:http://www.jiuzhang.com/?source=code
*/ //选择排序
public class Solution {/** @param A: an integer array* @return: */public void sortIntegers(int[] A) {// write your code herefor (int i = 0; i < A.length; i++) {int minIdx = i;for (int j = i; j < A.length; j++) {if (A[j] < A[minIdx]) {minIdx = j;}}int tmp = A[i];A[i] = A[minIdx];A[minIdx] = tmp;}}
}//选择排序2
public class Solution {/** @param A: an integer array* @return: */public void sortIntegers(int[] A) {// write your code herefor (int i = 0; i < A.length; i++) {for (int j = i + 1; j < A.length; j++) {if (A[i] > A[j]) {int tmp = A[i];A[i] = A[j];A[j] = tmp;}}}}
}//插入排序
public class Solution {/** @param A: an integer array* @return: */public void sortIntegers(int[] A) {// write your code herefor (int i = 0; i < A.length; i++) {int newVal = A[i];int j = i - 1;while (j >= 0 && A[j] > newVal) {A[j + 1] = A[j];j--;}A[j + 1] = newVal;}}
}//冒泡排序
public class Solution {/** @param A: an integer array* @return: */public void sortIntegers(int[] A) {// write your code herewhile (true) {boolean exchange = false;for (int i = 0; i < A.length - 1; i++) {if (A[i] > A[i + 1]) {int tmp = A[i];A[i] = A[i + 1];A[i + 1] = tmp;exchange = true;}}if (!exchange) {break;}}}
}

补充一个冒泡排序算法(小白的自己写的)

/*** 数组冒泡排序法的练习*/
import java.util.Arrays;public class BubbleSort {public static void main(String[] args) {int[]arr= {84, 65, 95, 8, 63, 54, 25, 68, 47, 77, 58, 54, 69, 55, 58, 4, 5, 55, 48, 87, 45, 58, 54, 12, 25,49 };System.out.println(Arrays.toString(arr));System.out.println("----------------------------------------------------------------------------------------------------------------------------------------------");for(int i=0;i<arr.length-1;i++) {for(int x=0;x<arr.length-1-i;x++) {if (arr[x+1]>arr[x]) {int a=arr[x];arr[x]=arr[x+1];//冒泡排序法可以实现降序排序,如果是升序排序可以首选Arrays.sort()方法arr[x+1]=a;}}}System.out.println(Arrays.toString(arr));}}

第二部分:简单级别

1、A + B 问题

给出两个整数 a 和 b , 求他们的和。

你不需要从输入流读入数据,只需要根据aplusb的两个参数a和b,计算他们的和并返回就行。

不使用加法运算符计算a+b

答案:

/**
* 本参考程序来自九章算法,由 @九章算法 提供。版权所有,转发请注明出处。
* - 九章算法致力于帮助更多中国人找到好的工作,教师团队均来自硅谷和国内的一线大公司在职工程师。
* - 现有的面试培训课程包括:九章算法班,系统设计班,算法强化班,Java入门与基础算法班,Android 项目实战班,
* - Big Data 项目实战班,算法面试高频题班, 动态规划专题班
* - 更多详情请见官方网站:http://www.jiuzhang.com/?source=code
*/ class Solution {/** param a: The first integer* param b: The second integer* return: The sum of a and b*/public int aplusb(int a, int b) {// 主要利用异或运算来完成 // 异或运算有一个别名叫做:不进位加法// 那么a ^ b就是a和b相加之后,该进位的地方不进位的结果// 然后下面考虑哪些地方要进位,自然是a和b里都是1的地方// a & b就是a和b里都是1的那些位置,a & b << 1 就是进位// 之后的结果。所以:a + b = (a ^ b) + (a & b << 1)// 令a' = a ^ b, b' = (a & b) << 1// 可以知道,这个过程是在模拟加法的运算过程,进位不可能// 一直持续,所以b最终会变为0。因此重复做上述操作就可以// 求得a + b的值。while (b != 0) {int _a = a ^ b;int _b = (a & b) << 1;a = _a;b = _b;}return a;}
};

2、数组中两数之和等于一个目标数值

给一个整数数组,找到两个数使得他们的和等于一个给定的数 target

你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1

你可以假设只有一组答案

样例

给出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1].

挑战

Either of the following solutions are acceptable:

  • O(n) Space, O(nlogn) Time

O(n) Space, O(n) Time

官方参考答案:

Given an array of integers, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

You may assume that each input would have exactly one solution.

Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

方法一:

/**
* 本参考程序来自九章算法,由 @九章算法 提供。版权所有,转发请注明出处。
* - 九章算法致力于帮助更多中国人找到好的工作,教师团队均来自硅谷和国内的一线大公司在职工程师。
* - 现有的面试培训课程包括:九章算法班,系统设计班,算法强化班,Java入门与基础算法班,Android 项目实战班,
* - Big Data 项目实战班,算法面试高频题班, 动态规划专题班
* - 更多详情请见官方网站:http://www.jiuzhang.com/?source=code
*/ public class Solution {/** @param numbers : An array of Integer* @param target : target = numbers[index1] + numbers[index2]* @return : [index1 + 1, index2 + 1] (index1 < index2)numbers=[2, 7, 11, 15],  target=9return [1, 2]*/public int[] twoSum(int[] numbers, int target) {HashMap<Integer,Integer> map = new HashMap<>();for (int i = 0; i < numbers.length; i++) {if (map.get(numbers[i]) != null) {int[] result = {map.get(numbers[i]), i};return result;}map.put(target - numbers[i], i);}int[] result = {};return result;}
}

方法二:

双指针方法,时间复杂度O(nlgn)

/**
* 本参考程序来自九章算法,由 @白助教 提供。版权所有,转发请注明出处。
* - 九章算法致力于帮助更多中国人找到好的工作,教师团队均来自硅谷和国内的一线大公司在职工程师。
* - 现有的面试培训课程包括:九章算法班,系统设计班,算法强化班,Java入门与基础算法班,Android 项目实战班,
* - Big Data 项目实战班,算法面试高频题班, 动态规划专题班
* - 更多详情请见官方网站:http://www.jiuzhang.com/?source=code
*/ public class Solution {/** @param numbers: An array of Integer* @param target: target = numbers[index1] + numbers[index2]* @return: [index1 + 1, index2 + 1] (index1 < index2)*/class Pair {Integer value;Integer index;Pair(Integer value, Integer index) {this.value = value;this.index = index;}Integer getValue() {return this.value;}}class ValueComparator implements Comparator<Pair> {    @Override    public int compare(Pair o1, Pair o2) {    return o1.getValue().compareTo(o2.getValue());      }}public int[] twoSum(int[] numbers, int target) {// write your code herePair[] number = new Pair[numbers.length];for(int i=0;i<numbers.length;i++) {number[i] = new Pair(numbers[i], i);}Arrays.sort(number, new ValueComparator());int L=0, R =  numbers.length-1;while(L<R) {if( number[L].getValue() + number[R].getValue() == target) {int t1 = number[L].index;int t2 = number[R].index;int[] result = {Math.min(t1,t2), Math.max(t1,t2)};return result;}if( number[L].getValue() + number[R].getValue() < target) {L++;} else {R--;}}int[] res = {};return res;}
}

 3、约瑟夫环

* 约瑟夫环(约瑟夫问题)是一个数学的应用问题:
 * 已知n个人(以编号1,2,3…n分别表示)围坐在
 * 一张圆桌周围。从编号为k的人开始报数,数到m的
 * 那个人出列;他的下一个人又从1开始报数,数到m
 * 的那个人又出列;依此规律重复下去,直到圆桌周
 * 围的人全部出列

答案:

public class JosephsonJunction {private static boolean same(int[]p,int l,int n) {for (int i = 0; i < l; i++) {if (p[i]==n) {return true;}}return false;}public static void play(int playerNum,int step) {int [] p=new int[playerNum];int counter=1;while(true) {if(counter>playerNum*step) {break;}}for (int i = 0; i < playerNum+1; i++) {while(true) {if (counter>playerNum*step) break;elsei=i+1;    }if (i>playerNum) {break;}if (counter%step==0) {System.out.println(i+" ");p[counter/step-1]=i;}counter +=1;}System.out.println();}public static void main(String[] args) {play(10,7);}}

暂时先写到这里,因为自己是初学者,很多算法还不理解,看不懂,所以暂时先更新到这里,以后慢慢增加!

java基础算法题(入门题与简单题)相关推荐

  1. Oracle数据库基础教程:入门其实很简单

    为什么80%的码农都做不了架构师?>>>    Oracle数据库基础教程:入门其实很简单 Oracle数据库系统是目前最流行的客户/服务器数据库之一.本文集从初学者的角度出发,由浅 ...

  2. Java基础算法题(07):输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

    查看所有50道基础算法题请看: Java的50道基础算法题 package Demo07Character_Count; import java.util.Scanner; public class ...

  3. Java基础算法50题(一)

    文章目录 1.有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 2.判断101-200之间有多少个素数,并输出所有素 ...

  4. Java基础算法题(01):判断101-200之间有多少个素数,并输出所有素数。 素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数。也就是素数只有两个因子。

    查看所有50道基础算法题请看: Java的50道基础算法题 import java.util.ArrayList; import java.util.List; public class Detect ...

  5. Java基础算法题(02):古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    查看所有50道基础算法题请看: Java的50道基础算法题 递归的方法 package Demo02Rabbits; import java.util.Scanner; public class Ra ...

  6. Java基础算法题(18):两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三

    查看所有50道基础算法题请看: Java的50道基础算法题 两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c ...

  7. 一、基础算法9:区间合并 模板题+算法模板(区间合并)

    文章目录 算法模板 离散化题目模板 模板题 区间和 原题链接 题目 题解 思路 算法模板 离散化题目模板 // 将所有存在交集的区间合并 void merge(vector<PII> &a ...

  8. Java基础 (适合新手入门保姆级)

    基础1 1.进制的转换 1. 十进制数据转成二进制数据:使用除以2获取余数的方式 2. 二进制(0B/b开头)转换为十进制:1001 = 1*2^0+0*2^1+0*2^2 +1*2^3 = 9 3. ...

  9. 【bzoj2751】[HAOI2012]容易题(easy) 数论,简单题

    Description 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取 ...

最新文章

  1. BLE-NRF51822教程8-动态广播
  2. 产品经理挑战赛,你敢来吗?
  3. k8s之pod管理(控制器)
  4. ASP.NET Core 进程外(out-of-process)托管(7)《从零开始学ASP.NET CORE MVC》
  5. db2 删除索引_MYSQL进阶——索引
  6. 微处理器硬件喂狗_硬件基础:微控制器到底是什么?
  7. python3列表推导式矩阵转置_python3进阶之推导式1之列表(list)推导式(comprehensions)...
  8. Date类的getYear(),getMonth过时,现在的获取方法
  9. Prime Path素数筛与BFS动态规划
  10. 区块链发展迎来新机遇
  11. 银盛支付银账通进件接口php demo 签名 上传图片 进件 获取token 超简洁sdk
  12. 游戏辅助制作核心--植物大战僵尸逆向之植物叠加种植(八)
  13. Windows系统保存电脑当前桌面壁纸图片
  14. 批量注册阿里云备案域名
  15. matlab构建信道模型channel model, Rayleigh channel (NLoS), Rician channel (LoS)
  16. html页面颜色对应代码
  17. INDEMIND带你玩转OpenCV4.0(一):DIS光流算法解析
  18. 2021年焊工(初级)考试题及焊工(初级)考试试卷
  19. Java在线考试系统(含源码)
  20. 高校三维地图校内导航系统

热门文章

  1. 如何安全地创建嵌套目录?
  2. Win10怎么让英伟达独立显卡成为主显卡
  3. SpringBoot配置RunDashboard
  4. C语言随笔小算法:创建双向链表
  5. C语言SOCKET编程指南
  6. 浙大计算机基础知识2,[精选资料]14年浙大远程计算机基础2Windows知识题高起专 作业题2答案...
  7. linux 下生成中文pdf,Linux itex pdf生成中文不显示
  8. 微信小程序使用默认字体
  9. 两边双虚线是什么意思_锯齿车道、倒三角标志什么意思?以下5种交通标线你认识几个?...
  10. wxpython播放视频_使用wxpython显示网络摄像头视频闪烁