精LintCode领扣算法问题答案:入门
Posted 二当家的白帽子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了精LintCode领扣算法问题答案:入门相关的知识,希望对你有一定的参考价值。
文章目录
- 23. 判断数字与字母字符
- 25. 打印X
- 37. 反转一个3位整数
- 145. 大小写转换
- 366. 斐波纳契数列
- 454. 矩阵面积
- 463. 整数排序
- 466. 链表节点计数
- 484. 交换数组两个元素
- 632. 二叉树的最大节点
- 1613. 最高频率的IP
- 297. 寻找最大值
- 298. 寻找素数
- 1910. 数组中出现次数最多的值
- 最后说两句
23. 判断数字与字母字符
描述
给出一个字符c,你需要判断它是不是一个数字字符或者字母字符。
如果是,返回true,如果不是返回false。
题解
public class Solution
/**
* @param c: A character.
* @return: The character is alphanumeric or not.
*/
public boolean isAlphanumeric(char c)
// write your code here
return Character.isDigit(c) || Character.isLetter(c);
25. 打印X
描述
输入一个正整数N, 你需要按如下方式返回一个字符串列表。
题解
public class Solution
/**
* @param n: An integer.
* @return: A string list.
*/
public List<String> printX(int n)
// write your code here.
List<String> ret = new ArrayList<>();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; ++i)
sb.setLength(0);
for (int j = 0; j < n; ++j)
if (j == i || j == n - 1 - i)
sb.append('X');
else
sb.append(' ');
ret.add(sb.toString());
return ret;
37. 反转一个3位整数
描述
反转一个只有3位数的整数。
题解
public class Solution
/**
* @param number: A 3-digit number.
* @return: Reversed number.
*/
public int reverseInteger(int number)
String value = new StringBuilder(number + "").reverse().toString();
return Integer.parseInt(value);
145. 大小写转换
描述
将一个字符由小写字母转换为大写字母
题解
public class Solution
/**
* @param character: a character
* @return: a character
*/
public char lowercaseToUppercase(char character)
// write your code here
return (char) (character-32);
366. 斐波纳契数列
描述
查找斐波纳契数列中第 N 个数。
所谓的斐波纳契数列是指:
前2个数是 0 和 1 。
第 i 个数是第 i-1 个数和第i-2 个数的和。
斐波纳契数列的前10个数字是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34 …
题解
public class Solution
/**
* @param n: an integer
* @return: an ineger f(n)
*/
public int fibonacci(int n)
// write your code here
switch (n)
case 1:
return 0;
// break;
case 2:
return 1;
// break;
default:
n = n - 2;
int result = 0;
int last2 = 0;
int last1 = 1;
while (n-- > 0)
result = last2 + last1;
last2 = last1;
last1 = result;
return result;
// break;
454. 矩阵面积
描述
实现一个矩阵类Rectangle,包含如下的一些成员变量与函数:
两个共有的成员变量 width 和 height 分别代表宽度和高度。
一个构造函数,接受2个参数 width 和 height 来设定矩阵的宽度和高度。
一个成员函数 getArea,返回这个矩阵的面积。
题解
public class Rectangle
/*
* Define two public attributes width and height of type int.
*/
// write your code here
private int width;
private int height;
/*
* Define a constructor which expects two parameters width and height here.
*/
// write your code here
public Rectangle(int width, int height)
this.width = width;
this.height = height;
/*
* Define a public method `getArea` which can calculate the area of the
* rectangle and return.
*/
// write your code here
public int getArea()
return this.width * height;
463. 整数排序
描述
给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。
题解
public class Solution
/**
* @param A: an integer array
* @return: nothing
*/
public void sortIntegers(int[] A)
// write your code here
Arrays.sort(A);
jre自带的排序算法不一样是算法?合理合法。
466. 链表节点计数
描述
计算链表中有多少个节点.
题解
/**
* Definition for ListNode
* public class ListNode
* int val;
* ListNode next;
* ListNode(int x)
* val = x;
* next = null;
*
*
*/
public class Solution
/**
* @param head: the first node of linked list.
* @return: An integer
*/
public int countNodes(ListNode head)
// write your code here
int count = 0;
while (head != null)
count++;
head = head.next;
return count;
484. 交换数组两个元素
描述
给你一个数组和两个索引,交换下标为这两个索引的数字
题解
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)
// write your code here
int t = A[index1];
A[index1] = A[index2];
A[index2] = t;
632. 二叉树的最大节点
描述
在二叉树中寻找值最大的节点并返回。
题解
/**
* Definition of TreeNode:
* public class TreeNode
* public int val;
* public TreeNode left, right;
* public TreeNode(int val)
* this.val = val;
* this.left = this.right = null;
*
*
*/
public class Solution
/*
* @param root: the root of tree
* @return: the max node
*/
public TreeNode maxNode(TreeNode root)
// write your code here
return this.getMaxChild(root);
private TreeNode getMaxChild(TreeNode parent)
if (parent == null)
return null;
TreeNode maxLeft = parent.left;
TreeNode maxRight = parent.right;
if (maxLeft == null
&& maxRight == null)
return parent;
if (maxLeft != null)
maxLeft = this.getMaxChild(maxLeft);
if (maxRight != null)
maxRight = this.getMaxChild(maxRight);
if (maxLeft == null)
return this.max(parent, maxRight);
if (maxRight == null)
return this.max(parent, maxLeft);
return this.max(parent, this.max(maxLeft, maxRight));
private TreeNode max(TreeNode node1, TreeNode node2)
return node1.val > node2.val ? node1 : node2;
1613. 最高频率的IP
描述
给定一个字符串数组lines, 每一个元素代表一个IP地址,找到出现频率最高的IP。
题解
public class Solution
/**
* @param ipLines: ip address
* @return: return highestFrequency ip address
*/
public String highestFrequency(String[] ipLines)
// Write your code here
int maxCount = 0;
String maxTimeIpLine = null;
Map<String, Integer> countMap = new HashMap<String, Integer>();
for (String ipLine : ipLines)
Integer count = countMap.get(ipLine);
if (count == null)
count = 0;
count++;
countMap.put(ipLine, count);
if (count > maxCount)
maxCount = count;
maxTimeIpLine = ipLine;
return maxTimeIpLine;
297. 寻找最大值
描述
寻找 n 个数中的最大值。
题解
public class Solution
/**
* @param nums: the list of numbers
* @return: return the maximum number.
*/
public int maxNum(List<Integer> nums)
// write your code here
int max = Integer.MIN_VALUE;
for (Integer n : nums)
if (n > max)
max = n;
return max;
298. 寻找素数
描述
输出n以内所有的素数。
- 保证 n 是100以内的整数。
题解
public class Solution
/**
* @param n: an integer
* @return: return all prime numbers within n.
*/
public List<Integer> prime(int n)
// write your code here
BitSet cache = new BitSet();
List<Integer> ret = new ArrayList<>();
for (int i = 2; i <= n; ++i)
if (cache.get(i))
continue;
if (this.isPrime(i))
ret.add(i);
int t = i;
while (t <= n - i)
t += i;
cache.set(t);
return ret;
private boolean isPrime(int n)
for (int i = 2; i <= Math.sqrt(n); ++i)
if (n % i == 0)
return false;
return true;
1910. 数组中出现次数最多的值
描述
在给定的数组中,找到出现次数最多的数字。
出现次数相同时,返回数值最小的数字。
- 数组长度不超过100000。
- 0 <= a[i] <= 2147483647
题解
public class Solution
/**
* @param array: An array.
* @return: An integer.
*/
public int findNumber(int[] array)
// Write your code here.
Map<Integer, Integer> counter = new HashMap<>();
int maxCountNum = array[0];
int maxCount = 0;
for (int n : array)
int count = counter.getOrDefault(n, 0) + 1;
counter.put(n, count);
if (count > maxCount)
maxCount = count;
maxCountNum = n;
else if (count == maxCount && n < maxCountNum)
maxCountNum = n;
return maxCountNum;
最后说两句
非常感谢你阅读本文章,如果你觉得本文对你有所帮助,请留下你的足迹,点个赞,留个言,多谢~
作者水平有限,如果文章内容有不准确的地方,请指正。
希望小伙伴们都能每天进步一点点。
本文由 二当家的白帽子 https://le-yi.blog.csdn.net/ 博客原创,转载请注明来源,谢谢~
以上是关于精LintCode领扣算法问题答案:入门的主要内容,如果未能解决你的问题,请参考以下文章