网站建设哪里公司好,台州网站建设,杭州软件开发培训机构,郑州微网站581. 最短无序连续子数组
题目要求#xff1a;
581. 最短无序连续子数组 给你一个整数数组 nums #xff0c;你需要找出一个 连续子数组 #xff0c;如果对这个子数组进行升序排序#xff0c;那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组#xff0c;…581. 最短无序连续子数组
题目要求
581. 最短无序连续子数组 给你一个整数数组 nums 你需要找出一个 连续子数组 如果对这个子数组进行升序排序那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组并输出它的长度。 示例 1 输入nums [2,6,4,8,10,9,15]
输出5
解释你只需要对 [6, 4, 8, 10, 9] 进行升序排序那么整个表都会变为升序排序。示例 2 输入nums [1,2,3,4]
输出0示例 3 输入nums [1]
输出0提示 1 nums.length 104-105 nums[i] 105 解题思路
我们定义一个数组num拷贝原数组然后对num进行升序排序再和原数组作比较定义left为左边第一个和原数组不相等的下标定义right为右边第一个和原数组不相等的下标这样我们就能找到最短子数组了返回right - left 1。
代码
class Solution {public int findUnsortedSubarray(int[] nums) {int len nums.length;if(len 1) {return 0;}int[] num Arrays.copyOf(nums, len);Arrays.sort(num);//左边界int left 0;//右边界int right len - 1;//找出左边界第一个不同的下标for(int i 0; i len; i) {if(num[i] nums[i]) {left;} else {break;}}//遍历完了left len即这个数组是有序的则返回0if(left len) return 0;//找右边界第一个不相等的下标for(int i len - 1; i 0; i--) {if(num[i] nums[i]) {right--;} else {break;}}return right - left 1;}
} 242. 有效的字母异位词
题目要求 242. 有效的字母异位词 给定两个字符串 s 和 t 编写一个函数来判断 t 是否是 s 的字母异位词。 注意若 s 和 t 中每个字符出现的次数都相同则称 s 和 t 互为字母异位词。 示例 1: 输入: s anagram, t nagaram
输出: true示例 2: 输入: s rat, t car
输出: false 提示: 1 s.length, t.length 5 * 104s 和 t 仅包含小写字母 解题思路
定义两个数组这两数组每一个下标都是存放26字母的其中唯一的一个下标分别存题目中两字符的字母个数当遍历完 t 和 s 字符串就比较这两数组的每一个下标都是否相等相等就符合题目要求不相等就不符合。
代码
class Solution {public boolean isAnagram(String s, String t) {if (s.length() ! t.length()) {return false;}int[] numS new int[26];int[] numT new int[26];for(int i 0; i s.length(); i) {numS[s.charAt(i) - a];}for(int i 0; i t.length(); i) {numT[t.charAt(i) - a];}for(int i 0; i 26; i) {if(numS[i] numT[i]) {continue;} else {return false;}}return true;}
} 202. 快乐数
题目要求 202. 快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为 对于一个正整数每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true 不是则返回 false 。 示例 1 输入n 19
输出true
解释
12 92 82
82 22 68
62 82 100
12 02 02 1示例 2 输入n 2
输出false提示 1 n 231 - 1 解题思路
题目已经告诉我们给定的n它要么循环计算后的结果会是1是1就返回true要么计算的结果是无限循环的那么肯定会计算过程中肯定会出现相同的结果那么我们就用hash表存放这些计算结果如果计算的结果是1就返回true要是有重复出现的数字就返回false。
代码
class Solution {public boolean isHappy(int n) {SetInteger set new HashSet();int result 0;int flg;do {while(n 0) {int tmp n % 10;result tmp * tmp;n / 10;}if(!set.contains(result)) {set.add(result);} else {return false;}n result;flg result;result 0;} while (flg ! 1);return true;}
}