1.最大子序和
/** * 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 * 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] * 输出:6 * 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。 */public class Test_01 { public static void main(String[] args) { int[] nums = {-2,1,-3,4,-1,2,1,-5,4}; int res = mxaSubArray(nums); System.out.println(res); } /** * 解释: * 数组第一个数赋值给res * 定义一个常量sum=0存放临时 * for循环 */ private static int mxaSubArray(int[] nums) { int res = nums[0]; int sum = 0; for (int num : nums) { if (sum > 0) sum += num; else sum = num; res = Math.max(res, sum); } return res; }}
2.两数之和
/** * 输入:nums = [2,7,11,15], target = 9 * 输出:[0,1] * 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] */public class Test { public static void main(String[] args) { int[] nums = {3,2,4}; int target = 6; Solution solution = new Solution(); int[] ints = solution.twoSum(nums, target); for (Integer i :ints) { System.out.println(i); } }}class Solution { public int[] twoSum(int[] nums, int target) { HashMap<Integer,Integer> map = new HashMap<>(); for(int i = 0; i < nums.length; i++){ if(map.containsKey(nums[i])){ return new int[]{map.get(nums[i]), i}; } map.put(target - nums[i], i); } return null; }}
3.最后一个单词的长度
/** * 给你一个字符串 s,由若干单词组成,单词之间用空格隔开。 * 返回字符串中最后一个单词的长度。如果不存在最后一个单词,请返回 0 * * 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 */public class Test_02 { public static void main(String[] args) { String s = "Today is a nice day"; int res = lengthOfLastWord(s); System.out.println(res); } private static int lengthOfLastWord(String s) { String[] split = s.split(" "); if (split.length==0){ return 0; } return split[split.length-1].length(); }}
4.加一
/** * 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 * 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 * 你可以假设除了整数 0 之外,这个整数不会以零开头。 */public class Test_03 { public static void main(String[] args) { int[] array = {9,9,9}; int[] res = plusOne(array); System.out.println(Arrays.toString(res)); } private static int[] plusOne(int[] array) { for (int i = array.length-1; i >=0 ; i--) { if (array[i]!=9){ array[i]++; return array; } array[i] = 0; } //跳出for循环,说明数字全为9 int[] temp = new int[array.length+1]; temp[0] = 1; return temp; }}
5.整数反转
/** * 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 * 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 * * 假设环境不允许存储 64 位整数(有符号或无符号)。 * 输入:x = 123 * 输出:321 * 输入:x = -123 * 输出:-321 * 输入:x = 120 * 输出:21 */public class Test_01 { public static void main(String[] args) { int x = 0; int y = reversee(x); System.out.println(y); } private static int reversee(int x) { String s = String.valueOf(x); int flag = 1; if (x<0){ flag = -1; s = s.substring(1); } try{ return Integer.parseInt(new StringBuffer(s).reverse().toString())*flag; }catch (Exception e){ return 0; } }}
6.回文数
/** * 回文数 输入:x = 121 输出:true 输入:x = 10 输出:false */private static boolean isPalindrome1(int x) { String str = String.valueOf(x); char[] chars = str.toCharArray(); for (int i = 0; i < chars.length; i++) { if (chars[i] != chars[chars.length-1-i]){ return false; } } return true;}
7.最长公共长缀
/** * 编写一个函数来查找字符串数组中的最长公共前缀。 * 如果不存在公共前缀,返回空字符串 ""。 * 输入:strs = ["flower","flow","flight"] * 输出:"fl" * 输入:strs = ["dog","racecar","car"] * 输出:"" * 思想:拿String 的 startWith方法判断是否以她为前缀 */public static String longestCommonPrefix(String[] strs){ if (strs.length == 0) return ""; String flag = strs[0]; for (String string:strs) { while (!string.startsWith(flag)){ flag = flag.substring(0, flag.length()-1); } } return flag;}
8.爬楼梯
/** * 1 2 3 4 5 6 * 1 2 3 5 8 13 * * 输入: 2 * 输出: 2 * 解释: 有两种方法可以爬到楼顶。 * 1. 1 阶 + 1 阶 * 2. 2 阶 * 示例 2: * * 输入: 3 * 输出: 3 * 解释: 有三种方法可以爬到楼顶。 * 1. 1 阶 + 1 阶 + 1 阶 * 2. 1 阶 + 2 阶 * 3. 2 阶 + 1 阶 */private static int climbStairs(int i) { if (i<=2){ return i; } int i1 = 1; int i2 = 2; for (int j = 3; j <= i; j++) { int temp = i1+i2; i1=i2; i2=temp; } return i2;}
9.1比特与2比特字符
/** * 有两种特殊字符: * * 第一种字符可以用一个比特 0 来表示 * 第二种字符可以用两个比特(10 或 11)来表示、 * 给定一个以 0 结尾的二进制数组bits,如果最后一个字符必须是一位字符,则返回 true 。 * * 示例: * * 输入: bits = [1, 0, 0] * 输出: true * 解释: 唯一的编码方式是一个两比特字符和一个一比特字符。 * 所以最后一个字符是一比特字符。 * * 输入: bits = [1, 1, 1, 0] * 输出: false * 解释: 唯一的编码方式是两比特字符和两比特字符。 * 所以最后一个字符不是一比特字符。 *//** * 思路: * 1、遇到0则+1 * 2、遇到1则+2 * 3、判断最后与数组长度是否相等 */public static boolean isOneBitCharacter(int[] bits) { int start = 0; while (start<bits.length-1){ if (bits[start] == 0){ start++; } if (bits[start] == 1){ start += 2; } } return start == bits.length-1;}