寻找旋转排序数组中的最小值 II(数组二分查找)打印1000以内的所有素数,并从键盘输入一个正整数,判断是否为素数数组元素统计(算法初阶基础知识)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了寻找旋转排序数组中的最小值 II(数组二分查找)打印1000以内的所有素数,并从键盘输入一个正整数,判断是否为素数数组元素统计(算法初阶基础知识)相关的知识,希望对你有一定的参考价值。
寻找旋转排序数组中的最小值 II(数组、二分查找)
已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,4,4,5,6,7] 在变化后可能得到:
- 若旋转 4 次,则可以得到 [4,5,6,7,0,1,4]
- 若旋转 7 次,则可以得到 [0,1,4,4,5,6,7]
注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]] 。 给你一个可能存在 重复 元素值的数组 nums ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素 。
示例 1: 输入:nums = [1,3,5] 输出:1 示例 2: 输入:nums = [2,2,2,0,1] 输出:0
提示:
- n == nums.length
- 1 <= n <= 5000
- -5000 <= nums[i] <= 5000
- nums 原来是一个升序排序的数组,并进行了 1 至 n 次旋转
进阶:
- 这道题是 寻找旋转排序数组中的最小值的延伸题目。
- 允许重复会影响算法的时间复杂度吗?会如何影响,为什么?
解答:
class Solution
public int findMin(int[] nums)
int left = 0, right = nums.length - 1;
while (left < right)
int mid = (left + right) / 2;
if (nums[mid] > nums[right])
left = mid + 1;
else if (nums[mid] < nums[right])
right = mid;
else
right = right - 1;
return nums[left];
打印1000以内的所有素数,并从键盘输入一个正整数,判断是否为素数
- 主类内至少两个方法,boolean prime(int p)方法和main()方法,prime方法判断参数p是否为素数。
- 1000以内的素数放入一个数组再打印。
- 单行风格,良好可读性,运行结果正确。
解答:
import java.util.*;
public class Main
public static void main(String[] args)
List<Integer> numList = new ArrayList<>();
for(int i= 2;i<=1000;i++)
for(int j=2;j<=i;j++)
if(i%j==0&&j!=i)
break;
else if(j==i)
numList.add(i);
System.out.println("1000以内的素数");
for(Integer integer : numList)
System.out.print(integer+" ");
System.out.println();
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
function function = new function();
System.out.println(function.prime(i));
class function
public boolean prime(int p)
for(int i = 2;i<=(p/2);i++)
if(p%i==0&&p!=i)
return false;
return true;
数组元素统计(算法初阶、基础知识)
定义一个长度为5的数组arr1,用于存放5个1~9的随机整数(范围包含1和9),再定义一个长度为2的数组arr2,统计arr1中的元素对2求余等于0的个数,保存到arr2[0], 统计arr1中的元素对3求余等于0的个数,保存到arr2[1],在控制台打印输出arr2的所有元素。
解答:
package com.auskat.demo.cc;
import java.util.Random;
public class RandomTest
public static void main(String[] args)
int arr1[] = new int[5];
for (int i = 0; i < arr1.length; i++)
arr1[i] = new Random().nextInt(9) + 1;
int i2 = 0;
int j3 = 0;
for (int i = 0; i < arr1.length; i++)
if (arr1[i] % 2 == 0)
i2++;
if (arr1[i] % 3 == 0)
j3++;
int arr2[] = new int[2];
arr2[0] = i2;
arr2[1] = j3;
for (int i = 0; i < arr2.length; i++)
System.out.println(arr2[i]);
以上是关于寻找旋转排序数组中的最小值 II(数组二分查找)打印1000以内的所有素数,并从键盘输入一个正整数,判断是否为素数数组元素统计(算法初阶基础知识)的主要内容,如果未能解决你的问题,请参考以下文章
154. 寻找旋转排序数组中的最小值 II(困难)-二分查找
LeetCode.154 - 寻找旋转排序数组中的最小值 II(二分思想)
寻找旋转排序数组中的最小值 II(数组二分查找)打印1000以内的所有素数,并从键盘输入一个正整数,判断是否为素数数组元素统计(算法初阶基础知识)